MySQL中的B-Tree索引
阿新 • • 發佈:2019-09-22
索引型別
在MySQL中,索引是在儲存引擎層而不是伺服器層實現的,故而沒有統一的引擎標準:即同一種索引在不同儲存器上的實現可能不一樣。
B-Tree索引:
當人們談論索引的時候,如果沒有特別指出,多半講的就是B-Tree索引。B-Tree意味著所有的值都是按順序儲存的,並且每一個葉子到根的距離相同。下圖表反應了InnoDB的B-tree索引如何工作。
假如有以下表:
CREATE TABLE People ( last_name varchar(50) not null, first_name varchar(50) not null, dob date not null, gender enum('m', 'f') not null, key(last_name, first_name, dob) );
對於表中的每條資料,索引如下
索引對多個值進行排序的依據是create table語句中定義索引時列的順序。
B-Tree通常可以支援“只訪問索引查詢”,無需訪問資料行。
因為索引樹中的節點是有序的,所以除了按值查詢之外,索引還可以用於查詢中的order by操作。
T-Tree索引的限制:
- 如果不是按照索引的最左列開始查詢,則無法使用索引。如上表中不能查詢特定生日的人。
- 不能跳過索引中的列。如果不指定first_name,則MySQL只能使用索引的第一列。
- 如果查尋中有某個列的範圍(模糊)查詢,則其右邊所有列都無法使用索引