首頁  >  文章  >  資料庫  >  歸納整理關於mysql left join查詢慢時間長的踩坑

歸納整理關於mysql left join查詢慢時間長的踩坑

WBOY
WBOY轉載
2022-10-04 08:00:272899瀏覽

這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於left join查詢慢時間長的踩坑總結,包括了EXPLAIN命令對SELECT語句進行分析,下面一起來看一下,希望對大家有幫助。

歸納整理關於mysql left join查詢慢時間長的踩坑

推薦學習:mysql影片教學

#問題背景

兩張表一張是用戶表a (主鍵是int型別),一張是使用者俱體資訊表b(使用者表id欄位是varchar型別)。

因為要顯示使用者及使用者訊息,所以需要關聯查詢,但發現left join後查詢緩慢,耗時太長。用戶表資料2萬左右。

問題分析與處理

1、EXPLAIN 指令對 SELECT 語句進行分析

type欄位提供了判斷查詢是否有效率的重要依據依據. 透過 type 欄位, 我們判斷此查詢是 全表掃描 還是 索引掃描 等.

ALL: 表示全表掃描, 這個類型的查詢是效能最差的查詢之一.

通常來說, 我們的查詢不應該出現ALL 類型的查詢, 因為這樣的查詢在數據量大的情況下, 對數據庫的性能是巨大的災難. 如一個查詢是ALL 類型查詢, 那麼一般來說可以對相應的字段添加索引來避免.

2、新增索引

因為發現表b字段之前並沒有建索引。

alter table a add index idx_mbrID (mbrID);

再次Explain分析

發現type變為了ref,根據不同的type 類型的效能關係(

ALL < index < range ~ index_merge < ref < eq_ref < const < system

)比較後感覺可以了,於是執行查詢。

3、修改索引字段類型一致

執行查詢後發現執行速度並未優化,仔細看之前同事設計的表,發現索引類型字段不一致,於是修改為varchar 為int後再次查詢發現查詢速度明顯提升。

即使之前java程式碼裡面寫的string,資料庫改為int目前測試可正常使用

總結

解決問題後,翻起了開發手冊,發現索引規約明確強制join時資料型別必須一致,被關聯欄位必須有索引! ! !

#推薦學習:mysql影片教學

#

以上是歸納整理關於mysql left join查詢慢時間長的踩坑的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除