常見索引模型
哈希表:
數(shù)組+鏈表丙唧,hash算法取得index,若沖突則鏈表。
適用于:只有等值查詢的場景有序數(shù)組:
數(shù)組僵驰,查詢方便,修改記錄成本較高
適用于:靜態(tài)存儲引擎搜索樹
平衡N叉樹
InnoDB索引模型
B+樹唁毒,減少單次查詢的磁盤訪問數(shù)蒜茴。
設(shè)有如下建表語句
create table T(
id int primary key,
k int not null,
name varchar(16),
index (k)
)engine=InnoDB;
表中R1~R5的(ID,k)值分別為(100,1)、(200,2)浆西、(300,3)粉私、(500,5)和(600,6),兩棵樹的示例示意
圖如下近零。
InnoDB的索引組織結(jié)構(gòu)
主鍵索引(聚簇索引):葉節(jié)點(diǎn)為整行數(shù)據(jù)
非主鍵索引(二級索引):葉節(jié)點(diǎn)為主鍵值
基于兩者查詢的區(qū)別:
- 基于主鍵:只搜索ID的B+樹诺核。
- 基于非主鍵索引:先搜索對應(yīng)索引樹獲得主鍵抄肖,再根據(jù)結(jié)果搜索主鍵索引樹。
索引維護(hù)
維護(hù)有序性窖杀,可能導(dǎo)致以下操作:
頁分裂:影響性能漓摩,影響空間利用率
頁合并:對利用率低的數(shù)據(jù)也頁進(jìn)行合并
自增主鍵:性能、存儲空間最優(yōu)
- 性能:保證插入新數(shù)據(jù)時都是追加操作陈瘦,不涉及其他記錄的移動幌甘,也不涉及葉節(jié)點(diǎn)分裂
- 存儲空間:主鍵長度小,普通索引占用空間就小
業(yè)務(wù)邏輯字段主鍵:(KV場景)
- 只有一個索引
- 該索引必須是唯一索引
重建索引:
非主鍵索引:
alter table T drop index k;
alter table T add index(k);
主鍵索引:
alter table T engine=InnoDB