簇集索引(主鍵索引):索引的葉子結點存的所有字段值,
非簇集索引(非主鍵索引): 索引的葉子結點存的是主鍵欄位的值
回表操作:
例子:表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樹就是用來儲存索引...