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

2022-09-25 04:09:08 字數 972 閱讀 2643

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

如果在一張幾千萬資料的表中以乙個沒有索引的列作為查詢條件,程式設計客棧大部分情況下查詢會非常耗時,這種查詢毫無疑問是乙個慢sql查詢。所以對於大資料量的查詢,需要建立適合的索引來優化查詢。

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

2. 鎖等待

常用的儲存引擎有 innodb 和 myisam,前者支援行鎖和表鎖,後者只支援表鎖。

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

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

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

因此,基於表鎖的資料庫操作,會導致sql阻塞等待,從而影響執行速度。在一些更新操作(insert\update\delete)大於或等於讀操作的情況下,mysql不建議使用myisam儲存引擎。

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

3. 不恰當的sql語句

使用不恰當的sql語句也是慢sql最常見的誘因之一。例如,習慣使用, sql語句,在大資料表中使用分頁查詢,以及對非索引字段進行排序等等。

以上就是本次介紹的全部知識點內容,感謝大家對我程式設計客棧們的支援。

本文標題: mysql慢sql語句常見誘因以及解決方法

本文位址: /shujuku/mysql/271128.html

慢 SQL 語句的幾種常見誘因

1.無索引 索引失效導致 慢查詢如果在一張幾千萬資料的表中以乙個沒有索引的列作為查詢條件,大部分情況下查詢會非常耗時,這種查詢毫無疑問是乙個慢 sql 查詢。所以對於大資料量的查詢,需要建立適合的索引來優化查詢。雖然我們很多時候建立了索引,但在一些特定的場景下,索引還有可能會失效,所以索引失效也是導...

mysql常見慢sql mysql 慢SQL分析

開啟慢sql記錄 為什麼要開啟慢sql記錄 mysql在執行過程中,某些sql可能會執行較長時間,我們通過配置一些東西,把這些sql記錄下來,以便我們分析和優化sql。首先先檢視是否已經開啟了記錄設定 mysql show variables like query variable name val...

mysql的慢語句 MySQL中慢語句如何記錄?

實際工作中經常會遇到資料庫操作突然變慢的情況,但是檢查了各種硬體設施以及網路監控後發現都沒有什麼問題 這時候就要從資料庫入手了,而慢sql是我們工作中經常會遇到的影響查詢效能的情況。本文將介紹如何在mysql中獲取慢sql。一 資料庫中通過日誌記錄慢sql的幾個配置項 1.slow query lo...