MySQL回表查詢


一.MySQL索引類型

1.普通索引:最基本的索引,沒有任何限制

2.唯一索引(unique index):索引列的值必須唯一,但是允許為空

3.主鍵索引:特殊的唯一索引,但是不允許為空,一般在建表的時候同時創建主鍵索引

4.組合索引:指多個字段上創建的索引,只有在查詢條件中使用了創建索引時的第一個字段,索引才會被使用。使用組個索引時遵循最左前綴集合

5.全文索引:主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較

二.回表查詢

什么是回表查詢?

首先,從InnoDB說起,InnoDB的索引有兩種,聚集索引(clustered index)和普通索引(secondary index),聚集索引的葉子結點存儲的是行記錄,若表定義了PK,那么PK就是聚集索引(因此PK查詢非常快,直接定位行記錄),若表沒有定義PK,那么第一個not null unique列就是聚集索引。普通索引的葉子結點存儲的是主鍵值。

如:t(id PK, name KEY, sex, flag);id為聚集索引,name為普通索引

查詢

select * from t where name='lisi'; 

 

執行過程:

對於聚集索引,直接定位行記錄

對於普通索引,需要遍歷兩遍索引樹,如下圖所示,先通過普通索引定位到id,再通過聚集索引定位到行記錄。

這就是所謂的回表查詢,先定位主鍵值,再定位行記錄,性能比聚集索引低。

所以,避免回表查詢?

直接使用聚集索引(主鍵或者第一個唯一索引)即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM