1. 程式人生 > 實用技巧 >瞭解聚集索引,非聚集索引,聯合索引,索引覆蓋

瞭解聚集索引,非聚集索引,聯合索引,索引覆蓋

舉例,業務場景,使用者表,表結構為:

create table t_user(
uid primary key,
login_name unique,
passwd,
login_time,
age,
…
);

聚集索引(clustered index)

聚集索引決定資料在磁碟上的物理排序,一個表只能有一個聚集索引,一般用primary key來約束。

舉例:t_user場景中,uid上的索引。

非聚集索引(non-clustered index)

它並不決定資料在磁碟上的物理排序,索引上只包含被建立索引的資料,以及一個行定位符row-locator,這個行定位符,可以理解為一個聚集索引物理排序的指標,通過這個指標,可以找到行資料。

舉例,查詢年輕MM的業務需求:

select uid from t_user where age > 18 and age < 26;

age上建立的索引,就是非聚集索引。

聯合索引

多個欄位上建立的索引,能夠加速複核查詢條件的檢索

舉例,登入業務需求:

select uid, login_time from t_user where login_name=? and passwd=?

可以建立(login_name, passwd)的聯合索引。

聯合索引能夠滿足最左側查詢需求,例如(a, b, c)三列的聯合索引,能夠加速a | (a, b) | (a, b, c)三組查詢需求。

這也就是為何不建立(passwd, login_name)這樣聯合索引的原因,業務上幾乎沒有passwd的單條件查詢需求,而有很多login_name的單條件查詢需求。