国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL慢SQL語句常見誘因以及解決方法

2020-01-18 20:43:14
字體:
來源:轉載
供稿:網友

1. 無索引、索引失效導致慢查詢

如果在一張幾千萬數據的表中以一個沒有索引的列作為查詢條件,大部分情況下查詢會非常耗時,這種查詢毫無疑問是一個慢SQL查詢。所以對于大數據量的查詢,需要建立適合的索引來優化查詢。

雖然很多時候建立了索引,但在一些特定的場景下,索引還有可能會失效,所以索引失效也是導致慢查詢的主要原因之一。

2. 鎖等待

常用的存儲引擎有 InnoDB 和 MyISAM,前者支持行鎖和表鎖,后者只支持表鎖。

如果數據庫操作是基于表鎖實現的,試想下,如果一張訂單表在更新時,需要鎖住整張表,那么其它大量數據庫操作(包括查詢)都將處于等待狀態,這將嚴重影響到系統的并發性能。

這時,InnoDB 存儲引擎支持的行鎖更適合高并發場景。但在使用 InnoDB 存儲引擎時,要特別注意行鎖升級為表鎖的可能。在批量更新操作時,行鎖就很可能會升級為表鎖。

MySQL認為如果對一張表使用大量行鎖,會導致事務執行效率下降,從而可能造成其它事務長時間鎖等待和更多的鎖沖突問題發生,致使性能嚴重下降,所以MySQL會將行鎖升級為表鎖。還有,行鎖是基于索引加的鎖,如果在更新操作時,條件索引失效,那么行鎖也會升級為表鎖。

因此,基于表鎖的數據庫操作,會導致SQL阻塞等待,從而影響執行速度。在一些更新操作(insert/update/delete)大于或等于讀操作的情況下,MySQL不建議使用MyISAM存儲引擎。

除了鎖升級之外,行鎖相對表鎖來說,雖然粒度更細,并發能力提升了,但也帶來了新的問題,那就是死鎖。因此,在使用行鎖時,要注意避免死鎖。

3. 不恰當的SQL語句

使用不恰當的SQL語句也是慢SQL最常見的誘因之一。例如,習慣使用<SELECT *>,<SELECT COUNT(*)> SQL語句,在大數據表中使用<LIMIT M,N>分頁查詢,以及對非索引字段進行排序等等。

以上就是本次介紹的全部知識點內容,感謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 获嘉县| 马公市| 名山县| 东乡县| 长海县| 扬州市| 大新县| 宁安市| 庆阳市| 福泉市| 巢湖市| 扬中市| 理塘县| 正定县| 杭锦后旗| 思南县| 大姚县| 米林县| 佛坪县| 湟源县| 留坝县| 罗山县| 桂平市| 马鞍山市| 无极县| 阳西县| 墨脱县| 客服| 临沂市| 武清区| 湘潭县| 渭南市| 和硕县| 乌鲁木齐市| 青川县| 从化市| 菏泽市| 石林| 仁怀市| 平顶山市| 长春市|