MySQL innodb索引回表操作,最左匹配

2021-10-20 17:24:19 字數 985 閱讀 9740

簇集索引(主鍵索引):索引的葉子結點存的所有字段值,

非簇集索引(非主鍵索引): 索引的葉子結點存的是主鍵欄位的值

回表操作:

例子:表table 有主鍵 a,索引b

select a,b,c from table where a=1 ,因為a是簇集索引有所有字段,不會回表查

select a,b,c from table where b=1,因為b是非簇集索引只有主鍵a和索引b,會回表查,步驟是拿a去a的簇集索引去找到c,最後a,b,c都有了

避免:select自己需要的字段,給需要的字段建立聯合索引

最左匹配:

例子如索引(name,age)  

那麼select * from emp where age =1 不會走索引

select * from emp where name=

'張三' 走索引

解決:建立索引(name,age) ,age

索引覆蓋:

概括:只需要在一棵索引樹上就能獲取sql所需的所有列資料,無需回表,速度更快。

常見的方法是:將被查詢的字段,建立到聯合索引裡去。

索引下推:

例子:

如現在有個表table,有組合索引(name,age)

現在的sql:

select * from table where name like '張%' and age =20

在mysql5.6之前,執行過程是忽略age(最左匹配)使用name的索引,找到多個符合name條件的id,根據id一次次回表查資料

在mysql5.6之後,使用name索引同時,同時判斷age=20,直接查出少量id回表查

mysql索引回表

先索引掃瞄,再通過id去取索引中未能提供的資料,即為回表。建表mysql create table t id int primary key,k int not null,name varchar 16 index k engine innodb 如果語句是 select from t where ...

mysql索引回表

mysql索引回表概念 1 先通過普通索引 普通索引,唯一索引,組合索引 定位到主鍵值 2 在通過聚集索引定位到行記錄 這就是所謂的回表查詢,先定位主鍵值,再定位行記錄,然後根據行記錄數主鍵id掃瞄索引數,查詢出資料,它的效能較掃一遍索引樹更低 舉例說明 當有乙個表有四個字段,分別是id name,...

MySQL InnoDB索引相關

一般資料庫的資料 資料本身和結構維護資料 最終都是要落地到磁碟上,進行讀取的時候不可能一次性將所有資料全部載入到記憶體,所以記憶體中需要不停的置換磁碟上的內容,索引也是一樣,乙個資料庫的索引佔據的空間也是不小的資料,都是分頁載入的,所以需要合適的資料結構來儲存才能保持較好的效能,b樹就是用來儲存索引...