假如有兩個b+樹索引分別如下面的圖:
(1)id為主鍵,聚集索引,葉子節點儲存行記錄;
(2)name為key,普通索引,葉子節點儲存id值;
然後現在有一條sql語句
select
*from t where name=
'lisi'
;
看看執行過程:
這就是所謂的回表查詢,就是還要回表查詢一次。
還是用上面的例子,這次的sql語句換成下面這個:
select id,name from
user
where name=
'lisi'
;
可以發現通過name的索引樹就可以獲取到所有需要的值,不需要回表查詢這就叫覆蓋索引。
而且用explain來看 extra欄位為using index
在mysql建立聯合索引時會遵循最左字首匹配的原則,即最左優先,在檢索資料時從聯合索引的最左邊開始匹配。
準備一張使用者表(user),其中主要幾個欄位有:id、name、age、address。建立聯合索引(name,age)。
①假設有乙個需求,要求匹配姓名第乙個為陳的所有使用者,sql語句如下:
select
*from
user
where name like
'陳%'
根據 「最佳左字首」 的原則,這裡使用了聯合索引(name,age)進行了查詢,效能要比全表掃瞄肯定要高。②問題來了,如果有其他的條件呢?假設又有乙個需求,要求匹配姓名第乙個字為陳,年齡為20歲的使用者,此時的sql語句如下:
select
*from
user
where name like
'陳%'
and age=
20
語句執行的過程:①5.6版本之前《無索引下推》
會忽略age這個字段,直接通過name進行查詢,在(name,age)這顆索引樹上查詢到了兩個結果,id分別為2,1,然後拿著取到的id值一次次的回表查詢,因此這個過程需要回表兩次。
②mysql5.6及之後版本《有索引下推》
innodb並沒有忽略age這個字段,而是在索引內部就判斷了age是否等於20,對於不等於20的記錄直接跳過,因此在(name,age)這棵索引樹中只匹配到了乙個記錄,此時拿著這個id去主鍵索引樹中回表查詢全部資料,這個過程只需要回表一次。
總結一下:
mysql索引技術名詞1 5
目錄注意 1.如果依靠主鍵查詢,葉子結點直接儲存資料 主鍵b 樹 2.如果依靠其他健查詢查詢,葉子結點儲存主鍵值,再通過主鍵值查詢資料。通過主鍵值查詢資料的過程叫做回表 普通b 樹欄位查詢主鍵,再到主鍵b 樹查詢資料1 select from table1 where name zhangsan 2...
mysql個人資訊名詞 Mysql面試的技術名詞
面試的技術名詞 面試一般會遇到一些名詞,其實可能自己都知道其中的道理,但是因為沒了解過,當時心裡就一句wc,然後弱弱答一句 不好意思這個我只是聽過,具體還沒了解過 回表覆蓋索引 最左字首匹配 索引下推 1 回表 所謂的回表就是因為普通索引的葉子節點中儲存的不是行資料而是主鍵的值,然後通過主鍵值到主鍵...
SSL技術名詞解釋
什麼是公鑰基礎設施 pki 怎樣實現數字簽名?什麼是數字證書?什麼是伺服器證書?伺服器證書如何操作?如何實現加密?什麼是數字證書金鑰對?什麼是ssl證書?什麼是鑑別與加密?公用與私用數字證書有什麼區別?什麼是公鑰基礎設施 pki 返回頂部 如何實現加密?返回頂部 怎樣實現數字簽名?當使用乙個程式對資...