對(duì)于數(shù)據(jù)庫(kù)而言,只要做好數(shù)據(jù)存儲(chǔ)工作就行了,但對(duì)于SQL而言,執(zhí)行效率是很重要的指標(biāo)。
SQL執(zhí)行是偶爾慢還是一直慢?
這一點(diǎn)很重要,SQL語(yǔ)句執(zhí)行速度偶爾慢和一直慢的背后因素是不同的,自然要分場(chǎng)景來(lái)分析問(wèn)題。
SQL執(zhí)行偶爾慢的原因分析
如果一條SQL語(yǔ)句絕大多數(shù)情況下都是正常的,偶爾出現(xiàn)慢的情況,那一般來(lái)說(shuō)此SQL語(yǔ)句問(wèn)題不大,可能是其它因素影響了它的執(zhí)行效率,比如:
1、
若查詢量大,而查詢的數(shù)據(jù)頁(yè)又不在內(nèi)存中時(shí),就需要申請(qǐng)內(nèi)存,此時(shí)一旦內(nèi)存不足就會(huì)淘汰一些內(nèi)存數(shù)據(jù),這些操作就會(huì)影響SQL執(zhí)行速度。
2、
數(shù)據(jù)庫(kù)在同步日志及數(shù)據(jù)到磁盤(pán)上時(shí),也會(huì)影響SQL執(zhí)行效率。
3、
當(dāng)我們?cè)诓僮鲾?shù)據(jù)時(shí),若別人也在用這張表而且加鎖了,我們無(wú)法獲取到鎖,只能等待他人釋放鎖,這個(gè)很影響SQL效率。
SQL執(zhí)行一直慢的原因分析
如果數(shù)據(jù)量級(jí)不變,而某條SQL執(zhí)行時(shí)一直都很慢,那就需要看看SQL語(yǔ)句寫(xiě)法是否存在問(wèn)題了,另外數(shù)據(jù)庫(kù)的一些配置是否存在問(wèn)題,比如:
1、
比如更新操作,如果加了where條件,而條件列字段沒(méi)有索引,那就意味著要全表掃描,這樣一來(lái)SQL慢也就是正常現(xiàn)象了。
2、
并不是說(shuō)我們對(duì)字段創(chuàng)建了索引,索引就一定會(huì)生效。在某些情況下,一些SQL寫(xiě)法會(huì)導(dǎo)致索引失效,比如在索引列上使用了函數(shù)。
3、
SQL執(zhí)行時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)進(jìn)行一個(gè)預(yù)測(cè):看是走索引掃描的行數(shù)少,還是全表掃描的行數(shù)少。索引基數(shù)是通過(guò)采樣來(lái)統(tǒng)計(jì)的,存在一定誤差,如果誤差過(guò)大那可能會(huì)使系統(tǒng)錯(cuò)誤的決定使用全表掃描,此時(shí)我們可以在SQL中聲明強(qiáng)制走索引查詢。
4、
如果服務(wù)器CPU及磁盤(pán)讀寫(xiě)速度低、內(nèi)存小,那同樣會(huì)影響整個(gè)數(shù)據(jù)庫(kù)性能。
以上就是我的觀點(diǎn),對(duì)于這個(gè)問(wèn)題大家是怎么看待的呢?歡迎在下方評(píng)論區(qū)交流~我是科技領(lǐng)域創(chuàng)作者,十年互聯(lián)網(wǎng)從業(yè)經(jīng)驗(yàn),我了解更多科技知識(shí)!