mysql最左字首 mysql索引之最左字首法則

2021-10-17 12:57:04 字數 1224 閱讀 1967

1:最左字首法則

如果你的索引有多個字段,如圖1所示,索引欄位有 kq_time, card_no, kq_type這三個字段(最左字首就是按這三個欄位的前後順序進行排序的)

如果是三個查詢條件中三個欄位都用到了,如圖二(嚴格按照最左字首原則,查詢條件順序是使用了三個字段(kq_time,card_no,kq_type)

這是圖二是使用了全部索引,三個欄位的索引都用到了,key_len的長度是165,看圖三每個字段對應的長度,kq_time的型別是datetime長度是8,card_no的型別是varchar長度是50,kq_type的型別是varchar長度是1,所有總長度是8+(50*3+2)+(1*3+2)=165(這個值是預估值,有時候不準確,下面就會出現此情況),所以所有的索引都走了,索引長度計算看圖三

下面的圖四,遵守了最左字首原則,都走了部分索引kq_time(遵守了最左前段法則,查詢條件順序kq_time)

再看圖五,走了部分索引kq_time和card_no(遵守了最左前段法則,查詢條件順序kq_time和card_no)

圖六 (沒有遵守最左字首原則,查詢條件跳過kq_time欄位,使用了後面的兩個字段,所有不走索引)

圖七(遵守了最左字首原則,kq_time有了,後面沒有card_no,直接使用了kq_type,所有索引只走了kq_time)

在最後,總結一下什麼最左字首原則:查詢從索引的最左前列開始並且不跳過索引中的列,通俗易懂的來說就是:帶頭大哥不能死、中間兄弟不能斷

mysql 只能最左字首嗎 mysql最左字首原則

假設我們要查詢以下sql語句,如果沒有索引我們就會掃瞄整張物理表 select uid from people where lname liu and fname zhiqun and age 26 假設建有單列索引index lname 那麼系統就會先到lname索引表中查詢得到符合條件的peop...

mysql 只能最左字首嗎 MySQL最左字首原則

通過例項理解單列索引 多列索引以及最左字首原則 例項 現在我們想查出滿足以下條件的使用者id mysql select uid from people where lname liu and fname zhiqun and age 26 因為我們不想掃瞄整表,故考慮用索引。單列索引 alter t...

MySql最左字首原則

企業的筆試題,對資料庫這塊了解很淺,所以還是記錄一下吧。b tree 索引和 hash 索引的對比 對於 b tree 和 hash 資料結構的理解能夠有助於 不同儲存引擎下使用不同索引的查詢效能的差異,尤其是那些允許你選擇 b tree 或者 hash 索引的記憶體儲存引擎。b tree 索引的特...