1. 程式人生 > >MySQL中的B-Tree索引

MySQL中的B-Tree索引

索引型別


在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只能使用索引的第一列。
  • 如果查尋中有某個列的範圍(模糊)查詢,則其右邊所有列都無法使用索引