Mysql之索引引發的回表問題

  啥是索引?姑且引用一下高性能mysql中的一句話:索引(mysql也叫作鍵(key))是存儲引擎用於快速找到記錄的一種數據結構。這句話有兩個點:存儲引擎和數據結構。首先理解索引是在存儲引擎層而非服務器層實現。而mysql分爲多種存儲引擎,這裏我們只探討myisam 和InnoDB,他們支持B+Tree(一種數據結構)索引。 如果說這個理解不了,那麼你還有一個通俗易懂的方法,任何一般書都有目錄,快速找到自己需要內容的方法,就是查看目錄,索引就是目錄的部分。

迴歸我們的主題:迴歸主題——索引引發的回表問題,索引爲啥會引發回表那?

下面我們來假設一種情況,一個表有三個字段 ID ,name ,age,我將ID設置成主鍵索引,name設成輔助索引。然後來看一下下面的sql:

1.select * from t where id='5';

2.select * from t where name='張三';

兩個很簡單的Sql,第一個sql不用說,直接通過主鍵索引,從樹上直接可以得到結果,那第二個sql:首先name,mysql並不能得到所有列的信息(也就是*),他只能得到主鍵ID,然後他會根據ID在進行二次查詢,這就引發了--回表問題。這就是爲啥不能使用*的原因。

那麼怎麼解決那:第一不要寫*,第二利用組合索引,也就是說你根據業務實際需要,將需要的字段形成組合索引。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章