這篇文章主要為大家展示了“慢SQL語(yǔ)句常見(jiàn)原因是什么”,內容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習一下“MySQL慢SQL語(yǔ)句常見(jiàn)原因是什么”這篇文章吧。
1. 無(wú)索引、索引失效導致慢查詢(xún)
如果在一張幾千萬(wàn)數據的表中以一個(gè)沒(méi)有索引的列作為查詢(xún)條件,大部分情況下查詢(xún)會(huì )非常耗時(shí),這種查詢(xún)毫無(wú)疑問(wèn)是一個(gè)慢SQL查詢(xún)。所以對于大數據量的查詢(xún),需要建立適合的索引來(lái)優(yōu)化查詢(xún)。
雖然很多時(shí)候建立了索引,但在一些特定的場(chǎng)景下,索引還有可能會(huì )失效,所以索引失效也是導致慢查詢(xún)的主要原因之一。
2. 鎖等待
常用的存儲引擎有 InnoDB 和 MyISAM,前者支持行鎖和表鎖,后者只支持表鎖。
如果數據庫操作是基于表鎖實(shí)現的,試想下,如果一張訂單表在更新時(shí),需要鎖住整張表,那么其它大量數據庫操作(包括查詢(xún))都將處于等待狀態(tài),這將嚴重影響到系統的并發(fā)性能。
這時(shí),InnoDB 存儲引擎支持的行鎖更適合高并發(fā)場(chǎng)景。但在使用 InnoDB 存儲引擎時(shí),要特別注意行鎖升級為表鎖的可能。在批量更新操作時(shí),行鎖就很可能會(huì )升級為表鎖。
MySQL認為如果對一張表使用大量行鎖,會(huì )導致事務(wù)執行效率下降,從而可能造成其它事務(wù)長(cháng)時(shí)間鎖等待和更多的鎖沖突問(wèn)題發(fā)生,致使性能?chē)乐叵陆?,所以MySQL會(huì )將行鎖升級為表鎖。還有,行鎖是基于索引加的鎖,如果在更新操作時(shí),條件索引失效,那么行鎖也會(huì )升級為表鎖。
因此,基于表鎖的數據庫操作,會(huì )導致SQL阻塞等待,從而影響執行速度。在一些更新操作(insert\update\delete)大于或等于讀操作的情況下,MySQL不建議使用MyISAM存儲引擎。
除了鎖升級之外,行鎖相對表鎖來(lái)說(shuō),雖然粒度更細,并發(fā)能力提升了,但也帶來(lái)了新的問(wèn)題,那就是死鎖。因此,在使用行鎖時(shí),要注意避免死鎖。
3. 不恰當的SQL語(yǔ)句
使用不恰當的SQL語(yǔ)句也是慢SQL最常見(jiàn)的誘因之一。例如,習慣使用<SELECT *>,<SELECT COUNT(*)> SQL語(yǔ)句,在大數據表中使用<LIMIT M,N>分頁(yè)查詢(xún),以及對非索引字段進(jìn)行排序等等。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站