91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾個(gè)寫(xiě)SQL時(shí)常見(jiàn)的“壞毛病”及優(yōu)化技巧

程序員cxuan ? 來(lái)源:程序員cxuan ? 2023-01-17 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


今天給大家分享幾個(gè)寫(xiě) SQL 時(shí)常見(jiàn)的“壞毛病”及優(yōu)化技巧。

1、LIMIT 語(yǔ)句

分頁(yè)查詢是最常用的場(chǎng)景之一,但也通常也是最容易出問(wèn)題的地方。比如對(duì)于下面簡(jiǎn)單的語(yǔ)句,一般 DBA 想到的辦法是在 type、 name、 create_time 字段上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。

SELECT*
FROMoperation
WHEREtype='SQLStats'
ANDname='SlowLog'
ORDERBYcreate_time
LIMIT1000,10;

好吧,可能90%以上的 DBA 解決該問(wèn)題就到此為止。但當(dāng) LIMIT 子句變成 “LIMIT 1000000,10” 時(shí),程序員仍然會(huì)抱怨:我只取10條記錄為什么還是慢?

要知道數(shù)據(jù)庫(kù)也并不知道第1000000條記錄從什么地方開(kāi)始,即使有索引也需要從頭計(jì)算一次。出現(xiàn)這種性能問(wèn)題,多數(shù)情形下是程序員偷懶了。

在前端數(shù)據(jù)瀏覽翻頁(yè),或者大數(shù)據(jù)分批導(dǎo)出等場(chǎng)景下,是可以將上一頁(yè)的最大值當(dāng)成參數(shù)作為查詢條件的。SQL 重新設(shè)計(jì)如下:

SELECT*
FROMoperation
WHEREtype='SQLStats'
ANDname='SlowLog'
ANDcreate_time>'2017-03-161400'
ORDERBYcreate_timelimit10;

2、隱式轉(zhuǎn)換

SQL語(yǔ)句中查詢變量和字段定義類型不匹配是另一個(gè)常見(jiàn)的錯(cuò)誤。比如下面的語(yǔ)句:

mysql>explainextendedSELECT*
>FROMmy_balanceb
>WHEREb.bpn=14000000123
>ANDb.isverifiedISNULL;
mysql>showwarnings;
|Warning|1739|Cannotuserefaccessonindex'bpn'duetotypeorcollationconversiononfield'bpn'

其中字段 bpn 的定義為 varchar(20),MySQL 的策略是將字符串轉(zhuǎn)換為數(shù)字之后再比較。函數(shù)作用于表字段,索引失效。

上述情況可能是應(yīng)用程序框架自動(dòng)填入的參數(shù),而不是程序員的原意?,F(xiàn)在應(yīng)用框架很多很繁雜,使用方便的同時(shí)也小心它可能給自己挖坑。

3、關(guān)聯(lián)更新、刪除

雖然 MySQL5.6 引入了物化特性,但需要特別注意它目前僅僅針對(duì)查詢語(yǔ)句的優(yōu)化。對(duì)于更新或刪除需要手工重寫(xiě)成 JOIN。

比如下面 UPDATE 語(yǔ)句,MySQL 實(shí)際執(zhí)行的是循環(huán)/嵌套子查詢(DEPENDENT SUBQUERY),其執(zhí)行時(shí)間可想而知。

UPDATEoperationo
SETstatus='applying'
WHEREo.idIN(SELECTid
FROM(SELECTo.id,
o.status
FROMoperationo
WHEREo.group=123
ANDo.statusNOTIN('done')
ORDERBYo.parent,
o.id
LIMIT1)t);

執(zhí)行計(jì)劃:

+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+
|1|PRIMARY|o|index||PRIMARY|8||24|Usingwhere;Usingtemporary|
|2|DEPENDENTSUBQUERY||||||||ImpossibleWHEREnoticedafterreadingconsttables|
|3|DERIVED|o|ref|idx_2,idx_5|idx_5|8|const|1|Usingwhere;Usingfilesort|
+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+

重寫(xiě)為 JOIN 之后,子查詢的選擇模式從 DEPENDENT SUBQUERY 變成 DERIVED,執(zhí)行速度大大加快,從7秒降低到2毫秒。

UPDATEoperationo
JOIN(SELECTo.id,
o.status
FROMoperationo
WHEREo.group=123
ANDo.statusNOTIN('done')
ORDERBYo.parent,
o.id
LIMIT1)t
ONo.id=t.id
SETstatus='applying'

執(zhí)行計(jì)劃簡(jiǎn)化為:

+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+
|1|PRIMARY||||||||ImpossibleWHEREnoticedafterreadingconsttables|
|2|DERIVED|o|ref|idx_2,idx_5|idx_5|8|const|1|Usingwhere;Usingfilesort|
+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+

4、混合排序

MySQL 不能利用索引進(jìn)行混合排序。但在某些場(chǎng)景,還是有機(jī)會(huì)使用特殊方法提升性能的。

SELECT* 
FROMmy_ordero
INNERJOINmy_appraiseaONa.orderid=o.id
ORDERBYa.is_replyASC,
a.appraise_timeDESC
LIMIT0,20

執(zhí)行計(jì)劃顯示為全表掃描:

+----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra
+----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+
|1|SIMPLE|a|ALL|idx_orderid|NULL|NULL|NULL|1967647|Usingfilesort|
|1|SIMPLE|o|eq_ref|PRIMARY|PRIMARY|122|a.orderid|1|NULL|
+----+-------------+-------+--------+---------+---------+---------+-----------------+---------+-+

由于 is_reply 只有0和1兩種狀態(tài),我們按照下面的方法重寫(xiě)后,執(zhí)行時(shí)間從1.58秒降低到2毫秒。

SELECT*
FROM((SELECT*
FROMmy_ordero
INNERJOINmy_appraisea
ONa.orderid=o.id
ANDis_reply=0
ORDERBYappraise_timeDESC
LIMIT0,20)
UNIONALL
(SELECT*
FROMmy_ordero
INNERJOINmy_appraisea
ONa.orderid=o.id
ANDis_reply=1
ORDERBYappraise_timeDESC
LIMIT0,20))t
ORDERBYis_replyASC,
appraisetimeDESC
LIMIT20;

5、EXISTS語(yǔ)句

MySQL 對(duì)待 EXISTS 子句時(shí),仍然采用嵌套子查詢的執(zhí)行方式。如下面的 SQL 語(yǔ)句:

SELECT*
FROMmy_neighborn
LEFTJOINmy_neighbor_applysra
ONn.id=sra.neighbor_id
ANDsra.user_id='xxx'
WHEREn.topic_status'xxx')
ANDn.topic_type<>5

執(zhí)行計(jì)劃為:

+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+
|1|PRIMARY|n|ALL||NULL|NULL|NULL|1086041|Usingwhere|
|1|PRIMARY|sra|ref||idx_user_id|123|const|1|Usingwhere|
|2|DEPENDENTSUBQUERY|m|ref||idx_message_info|122|const|1|Usingindexcondition;Usingwhere|
+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+

去掉 exists 更改為 join,能夠避免嵌套子查詢,將執(zhí)行時(shí)間從1.93秒降低為1毫秒。

SELECT*
FROMmy_neighborn
INNERJOINmessage_infom
ONn.id=m.neighbor_id
ANDm.inuser='xxx'
LEFTJOINmy_neighbor_applysra
ONn.id=sra.neighbor_id
ANDsra.user_id='xxx'
WHEREn.topic_status5

新的執(zhí)行計(jì)劃:

+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+
|1|SIMPLE|m|ref||idx_message_info|122|const|1|Usingindexcondition|
|1|SIMPLE|n|eq_ref||PRIMARY|122|ighbor_id|1|Usingwhere|
|1|SIMPLE|sra|ref||idx_user_id|123|const|1|Usingwhere|
+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+

6、條件下推

外部查詢條件不能夠下推到復(fù)雜的視圖或子查詢的情況有:

  • 聚合子查詢;
  • 含有 LIMIT 的子查詢;
  • UNION 或 UNION ALL 子查詢;
  • 輸出字段中的子查詢;

如下面的語(yǔ)句,從執(zhí)行計(jì)劃可以看出其條件作用于聚合子查詢之后

SELECT*
FROM(SELECTtarget,
Count(*)
FROMoperation
GROUPBYtarget)t
WHEREtarget='rm-xxxx'
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+
|1|PRIMARY||ref|||514|const|2|Usingwhere|
|2|DERIVED|operation|index|idx_4|idx_4|519|NULL|20|Usingindex|
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+

確定從語(yǔ)義上查詢條件可以直接下推后,重寫(xiě)如下:

SELECTtarget,
Count(*)
FROMoperation
WHEREtarget='rm-xxxx'
GROUPBYtarget

執(zhí)行計(jì)劃變?yōu)椋?/span>

+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+
|1|SIMPLE|operation|ref|idx_4|idx_4|514|const|1|Usingwhere;Usingindex|
+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+

7、提前縮小范圍

先上初始 SQL 語(yǔ)句:

SELECT*
FROMmy_ordero
LEFTJOINmy_userinfou
ONo.uid=u.uid
LEFTJOINmy_productinfop
ONo.pid=p.pid
WHERE(o.display=0)
AND(o.ostaus=1)
ORDERBYo.selltimeDESC
LIMIT0,15

該SQL語(yǔ)句原意是:先做一系列的左連接,然后排序取前15條記錄。從執(zhí)行計(jì)劃也可以看出,最后一步估算排序記錄數(shù)為90萬(wàn),時(shí)間消耗為12秒。

+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+
|1|SIMPLE|o|ALL|NULL|NULL|NULL|NULL|909119|Usingwhere;Usingtemporary;Usingfilesort|
|1|SIMPLE|u|eq_ref|PRIMARY|PRIMARY|4|o.uid|1|NULL|
|1|SIMPLE|p|ALL|PRIMARY|NULL|NULL|NULL|6|Usingwhere;Usingjoinbuffer(BlockNestedLoop)|
+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+

由于最后 WHERE 條件以及排序均針對(duì)最左主表,因此可以先對(duì) my_order 排序提前縮小數(shù)據(jù)量再做左連接。SQL 重寫(xiě)后如下,執(zhí)行時(shí)間縮小為1毫秒左右。

SELECT*
FROM(
SELECT*
FROMmy_ordero
WHERE(o.display=0)
AND(o.ostaus=1)
ORDERBYo.selltimeDESC
LIMIT0,15
)o
LEFTJOINmy_userinfou
ONo.uid=u.uid
LEFTJOINmy_productinfop
ONo.pid=p.pid
ORDERBYo.selltimeDESC
limit0,15

再檢查執(zhí)行計(jì)劃:子查詢物化后(select_type=DERIVED)參與 JOIN。雖然估算行掃描仍然為90萬(wàn),但是利用了索引以及 LIMIT 子句后,實(shí)際執(zhí)行時(shí)間變得很小。

+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+
|1|PRIMARY||ALL|NULL|NULL|NULL|NULL|15|Usingtemporary;Usingfilesort|
|1|PRIMARY|u|eq_ref|PRIMARY|PRIMARY|4|o.uid|1|NULL|
|1|PRIMARY|p|ALL|PRIMARY|NULL|NULL|NULL|6|Usingwhere;Usingjoinbuffer(BlockNestedLoop)|
|2|DERIVED|o|index|NULL|idx_1|5|NULL|909112|Usingwhere|
+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+

8、中間結(jié)果集下推

再來(lái)看下面這個(gè)已經(jīng)初步優(yōu)化過(guò)的例子(左連接中的主表優(yōu)先作用查詢條件):

SELECTa.*,
c.allocated
FROM(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resources
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

那么該語(yǔ)句還存在其它問(wèn)題嗎?不難看出子查詢 c 是全表聚合查詢,在表數(shù)量特別大的情況下會(huì)導(dǎo)致整個(gè)語(yǔ)句的性能下降。

其實(shí)對(duì)于子查詢 c,左連接最后結(jié)果集只關(guān)心能和主表 resourceid 能匹配的數(shù)據(jù)。因此我們可以重寫(xiě)語(yǔ)句如下,執(zhí)行時(shí)間從原來(lái)的2秒下降到2毫秒。

SELECTa.*,
c.allocated
FROM(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resourcesr,
(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
WHEREr.resourcesid=a.resourcesid
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

但是子查詢 a 在我們的SQL語(yǔ)句中出現(xiàn)了多次。這種寫(xiě)法不僅存在額外的開(kāi)銷,還使得整個(gè)語(yǔ)句顯的繁雜。使用 WITH 語(yǔ)句再次重寫(xiě):

WITHaAS
(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)
SELECTa.*,
c.allocated
FROMa
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resourcesr,
a
WHEREr.resourcesid=a.resourcesid
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

總結(jié)

數(shù)據(jù)庫(kù)編譯器產(chǎn)生執(zhí)行計(jì)劃,決定著SQL的實(shí)際執(zhí)行方式。但是編譯器只是盡力服務(wù),所有數(shù)據(jù)庫(kù)的編譯器都不是盡善盡美的。

上述提到的多數(shù)場(chǎng)景,在其它數(shù)據(jù)庫(kù)中也存在性能問(wèn)題。了解數(shù)據(jù)庫(kù)編譯器的特性,才能避規(guī)其短處,寫(xiě)出高性能的SQL語(yǔ)句。

程序員在設(shè)計(jì)數(shù)據(jù)模型以及編寫(xiě)SQL語(yǔ)句時(shí),要把算法的思想或意識(shí)帶進(jìn)來(lái)。

編寫(xiě)復(fù)雜SQL語(yǔ)句要養(yǎng)成使用 WITH 語(yǔ)句的習(xí)慣。簡(jiǎn)潔且思路清晰的SQL語(yǔ)句也能減小數(shù)據(jù)庫(kù)的負(fù)擔(dān) 。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    803

    瀏覽量

    46810
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    4059

    瀏覽量

    68442
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51781

原文標(biāo)題:這樣寫(xiě) SQL,差點(diǎn)人沒(méi)了

文章出處:【微信號(hào):cxuangoodjob,微信公眾號(hào):程序員cxuan】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SQL分析選型:DMS/DAS與NineData該如何選擇

    阿里云 DMS 的慢SQL 趨勢(shì)、DAS 的 SQL 審計(jì)能力成熟,可滿足阿里云用戶基礎(chǔ)需求。NineData 側(cè)重跨云統(tǒng)一工作臺(tái)、研發(fā)與 DBA 協(xié)同,打通慢日志分析、性能診斷、規(guī)范審核、索引建議全鏈路,更適配企業(yè)級(jí)慢查詢持續(xù)治理。
    的頭像 發(fā)表于 03-25 17:20 ?1455次閱讀
    慢<b class='flag-5'>SQL</b>分析選型:DMS/DAS與NineData該如何選擇

    基于FDP SSD的ROCKSDB寫(xiě)放大優(yōu)化

    作為SSD的關(guān)鍵指標(biāo),寫(xiě)放大(WriteAmplification,WA)始終是SSD領(lǐng)域待攻克的技術(shù)難題之一。其本質(zhì)表現(xiàn)為SSD的實(shí)際物理寫(xiě)入量超過(guò)主機(jī)原始請(qǐng)求寫(xiě)入量。
    的頭像 發(fā)表于 03-23 09:16 ?410次閱讀
    基于FDP SSD的ROCKSDB<b class='flag-5'>寫(xiě)</b>放大<b class='flag-5'>優(yōu)化</b>

    NineData 社區(qū)版的慢SQL分析,比查看日志+看EXPLAIN適合中小團(tuán)隊(duì)

    度分析,定位問(wèn)題后還可銜接后續(xù)操作。且其支持 Docker 單機(jī)本地內(nèi)網(wǎng)部署,10 個(gè)數(shù)據(jù)源額度適合中小團(tuán)隊(duì),優(yōu)化SQL 處理流程。
    的頭像 發(fā)表于 03-17 14:07 ?66次閱讀
    NineData 社區(qū)版的慢<b class='flag-5'>SQL</b>分析,比查看日志+看EXPLAIN適合中小團(tuán)隊(duì)

    MySQL 慢 SQL 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    DBeaver Community 和 Navicat Premium Lite 都是很有價(jià)值的客戶端工具,在單條 SQL 的查詢和驗(yàn)證上,依然是 DBA 最順手的入口。 但 NineData
    的頭像 發(fā)表于 03-17 11:53 ?69次閱讀
    MySQL 慢 <b class='flag-5'>SQL</b> 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    使用NVIDIA Nemotron RAG和Microsoft SQL Server 2025構(gòu)建高性能AI應(yīng)用

    在 Microsoft Ignite 2025 大會(huì)上,隨著 Microsoft SQL Server 2025 的發(fā)布,AI 就緒型企業(yè)數(shù)據(jù)庫(kù)愿景成為現(xiàn)實(shí),為開(kāi)發(fā)者提供強(qiáng)大的新工具,例如內(nèi)置向量
    的頭像 發(fā)表于 12-01 09:31 ?893次閱讀
    使用NVIDIA Nemotron RAG和Microsoft <b class='flag-5'>SQL</b> Server 2025構(gòu)建高性能AI應(yīng)用

    蜂鳥(niǎo)E203內(nèi)核優(yōu)化方法

    對(duì)蜂鳥(niǎo)E203內(nèi)核進(jìn)行優(yōu)化可以考慮以下幾個(gè)方面: 編譯器優(yōu)化:使用適合蜂鳥(niǎo)E203的編譯器選項(xiàng)和指令集,優(yōu)化編譯器的選項(xiàng)和參數(shù),開(kāi)啟對(duì)硬件的特定支持,比如使用-O2等
    發(fā)表于 10-21 07:55

    數(shù)據(jù)庫(kù)慢查詢分析與SQL優(yōu)化實(shí)戰(zhàn)技巧

    今天,我將分享我在處理數(shù)千次數(shù)據(jù)庫(kù)性能問(wèn)題中積累的實(shí)戰(zhàn)經(jīng)驗(yàn),幫助你系統(tǒng)掌握慢查詢分析與SQL優(yōu)化的核心技巧。無(wú)論你是剛?cè)腴T(mén)的運(yùn)維新手,還是有一定經(jīng)驗(yàn)的工程師,這篇文章都將為你提供實(shí)用的解決方案。
    的頭像 發(fā)表于 09-08 09:34 ?1110次閱讀

    數(shù)據(jù)庫(kù)性能瓶頸分析與SQL優(yōu)化實(shí)戰(zhàn)案例

    作為一名在一線摸爬滾打8年的運(yùn)維工程師,我見(jiàn)過(guò)太多因?yàn)閿?shù)據(jù)庫(kù)性能問(wèn)題而半夜被叫醒的場(chǎng)景。今天分享幾個(gè)真實(shí)的優(yōu)化案例,希望能幫你避開(kāi)這些坑。
    的頭像 發(fā)表于 08-27 14:31 ?661次閱讀

    數(shù)據(jù)庫(kù)性能優(yōu)化指南

    作為一名在大廠摸爬滾打多年的運(yùn)維老兵,我見(jiàn)過(guò)太多因?yàn)閿?shù)據(jù)庫(kù)性能問(wèn)題導(dǎo)致的生產(chǎn)事故。今天分享一套完整的數(shù)據(jù)庫(kù)優(yōu)化方法論,從SQL層面到硬件配置,幫你徹底解決性能瓶頸!
    的頭像 發(fā)表于 08-18 11:21 ?805次閱讀

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫(kù)表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?767次閱讀

    Text2SQL準(zhǔn)確率暴漲22.6%!3大維度全拆

    摘要 技術(shù)背景:Text2SQL 是將自然語(yǔ)言查詢轉(zhuǎn)為 SQL 的任務(wù),經(jīng)歷了基于規(guī)則、神經(jīng)網(wǎng)絡(luò)、預(yù)訓(xùn)練語(yǔ)言模型、大語(yǔ)言模型四個(gè)階段。當(dāng)前面臨提示優(yōu)化、模型訓(xùn)練、推理時(shí)增強(qiáng)三大難題,研究
    的頭像 發(fā)表于 08-14 11:17 ?764次閱讀
    Text2<b class='flag-5'>SQL</b>準(zhǔn)確率暴漲22.6%!3大維度全拆

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server數(shù)據(jù)庫(kù)被加密,無(wú)法使用。 數(shù)據(jù)庫(kù)MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?749次閱讀
    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理SQL命令詳解

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?7369次閱讀
    達(dá)夢(mèng)數(shù)據(jù)庫(kù)常用管理<b class='flag-5'>SQL</b>命令詳解

    鴻蒙5開(kāi)發(fā)寶藏案例分享---優(yōu)化應(yīng)用時(shí)延問(wèn)題

    ) } 效果 :5000條數(shù)據(jù)查詢****157ms → 110ms 原理 :避免重復(fù)解析列名,類似SQL預(yù)編譯 ?** 案例4:相機(jī)資源延遲釋放** 問(wèn)題 :關(guān)閉相機(jī)界面卡頓(457ms)優(yōu)化
    發(fā)表于 06-13 10:08

    大促數(shù)據(jù)庫(kù)壓力激增,如何一眼定位 SQL 執(zhí)行來(lái)源?

    你是否曾經(jīng)遇到過(guò)這樣的情況:在大促活動(dòng)期間,用戶訪問(wèn)量驟增,數(shù)據(jù)庫(kù)的壓力陡然加大,導(dǎo)致響應(yīng)變慢甚至服務(wù)中斷?更讓人頭疼的是,當(dāng)你試圖快速定位問(wèn)題所在時(shí),卻發(fā)現(xiàn)難以確定究竟是哪個(gè)業(yè)務(wù)邏輯中的 SQL
    的頭像 發(fā)表于 06-10 11:32 ?608次閱讀
    大促數(shù)據(jù)庫(kù)壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來(lái)源?