這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於left join查詢慢時間長的踩坑總結,包括了EXPLAIN命令對SELECT語句進行分析,下面一起來看一下,希望對大家有幫助。
推薦學習:mysql影片教學
兩張表一張是用戶表a (主鍵是int型別),一張是使用者俱體資訊表b(使用者表id欄位是varchar型別)。
因為要顯示使用者及使用者訊息,所以需要關聯查詢,但發現left join後查詢緩慢,耗時太長。用戶表資料2萬左右。
type欄位提供了判斷查詢是否有效率的重要依據依據. 透過 type 欄位, 我們判斷此查詢是 全表掃描 還是 索引掃描 等.
ALL: 表示全表掃描, 這個類型的查詢是效能最差的查詢之一.
通常來說, 我們的查詢不應該出現ALL 類型的查詢, 因為這樣的查詢在數據量大的情況下, 對數據庫的性能是巨大的災難. 如一個查詢是ALL 類型查詢, 那麼一般來說可以對相應的字段添加索引來避免.
因為發現表b字段之前並沒有建索引。
alter table a add index idx_mbrID (mbrID);
再次Explain分析
發現type變為了ref,根據不同的type 類型的效能關係(
ALL < index < range ~ index_merge < ref < eq_ref < const < system
)比較後感覺可以了,於是執行查詢。
執行查詢後發現執行速度並未優化,仔細看之前同事設計的表,發現索引類型字段不一致,於是修改為varchar 為int後再次查詢發現查詢速度明顯提升。
即使之前java程式碼裡面寫的string,資料庫改為int目前測試可正常使用
解決問題後,翻起了開發手冊,發現索引規約明確強制join時資料型別必須一致,被關聯欄位必須有索引! ! !
#推薦學習:mysql影片教學
#以上是歸納整理關於mysql left join查詢慢時間長的踩坑的詳細內容。更多資訊請關注PHP中文網其他相關文章!