[點晴永久免費OA][轉帖]什么時候 MySQL 查詢會變慢?
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
索引創建的好,并不意味著查詢就一定快,影響查詢效率的因素特別多,今天我們就來聊一聊這些可能影響到查詢的因素。 1. 查詢流程開始今天的內容之前,先來和小伙伴們大概捋一捋 MySQL 的查詢流程。我們來看如下一張圖:
這張圖大家大概有個印象,在后續的 MySQL 查詢和優化中,很多東西就容易理解了。 接下來我們就來看看什么情況下查詢會變慢。 2. 查詢了不需要的記錄數據按需取用。有時候我們會忽略多拿數據對查詢性能的影響,然而優化是一個錙銖必較的事情,需要多少數據就查詢多少,要盡量避免數據庫查詢 100 條,結果前端只展示 10 條這種情況。如有需要,可以通過 limit 來限制數據庫查詢出來的數據總量。
3. 返回需要的列查詢的時候盡量避免 特別是有的時候多表聯合查詢,如果用 在前面的文章中,松哥也和大家提到過覆蓋索引,如果索引設計得當,那么在查詢的時候可以通過覆蓋索引來提高查詢的性能,但是如果使用了 4. 恰到好處的緩存這里舉一個 TienChin 項目的例子,用戶登錄成功之后,在后續的流程中,經常會用到當前登錄用戶的信息,如果每次都去數據庫查詢,每次查詢返回結果都是一致的,沒有必要,此時我們可以將用戶信息存入到 Redis 緩存中,需要的時候從 Redis 中提取就可以了。 在項目中,對于這些需要多次頻繁查詢,且每次查詢返回結果一樣的數據,都可以選擇將之存入到緩存中以提高查詢性能。 5. 關注掃描行數在查詢的時候,我們可以通過 explain 來查看執行計劃,執行計劃中有一個指標是掃描行數,如下圖中的 rows,這個就表示查詢優化器預估要掃描多少行記錄,filtered 則表示預估滿足條件的比例。
6. 關注掃描類型這一條實際上就是讓大家關注前面查詢計劃中的 type 字段的值,type 字段的取值有很多種,例如常見的 index、ALL、range、const 以及 ref,還有一些不常見的如 system、eq_ref、fulltext、ref_or_null、index_merge、unique_subquery、index_subquery 等,每一種都代表了不同的查詢計劃,再結合查詢計劃中的 Extra 字段中的值,我們大致上可以將查詢分為三種類型:
該文章在 2023/7/20 14:32:23 編輯過 |
關鍵字查詢
相關文章
正在查詢... |