一、前言
1、需要了解mysql的索引。
2、在mysql中,建立一張表時會預設為主鍵建立聚簇索引,b+樹將表中所有的資料組織起來,即資料就是索引主鍵所以在innodb裡,主鍵索引也被稱為聚簇索引,索引的葉子節點存的是整行資料。而除了聚簇索引以外的所有索引都稱為二級索引,二級索引的葉子節點內容是主鍵的值。
二、建立二級索引
建立二級索引:
create index [index name] on [table name]([column name]);
或者
alter table [table name] add index [index name]([column name]);
在mysql中,create index 操作被對映為 alter table add_index。
三、二級索引格式
例如建立如下一張表:
create table users(
id int not null,
name varchar(20) not null,
age int not null,
primary key(id)
);
新建乙個以age欄位的二級索引:
alter table users add index index_age(age);
mysql會分別建立主鍵id的聚簇索引和age的二級索引:
在mysql中主鍵索引的葉子節點存的是整行資料,而二級索引葉子節點內容是主鍵的值。
四、二級索引的檢索過程
在mysql的查詢過程中,sql優化器會選擇合適的索引進行檢索,在使用二級索引的過程中,因為二級索引沒有儲存全部的資料,假如二級索引滿足查詢需求(一般來說,比如只查id和當前列屬性),則直接返回,即為覆蓋索引,反之則需要回表去主鍵索引(聚簇索引)查詢。
例如執行
select * from users where age=35;
需要進行回表:
使用 explain 檢視執行計畫可以看到使用的索引是我們之前建立的 index_age:
所以:二級索引是指定欄位與主鍵的對映,主鍵長度越小,普通索引的葉子節點就越小,二級索引占用的空間也就越小,所以要避免使用過長的字段作為主鍵。
附:以上知識是簡化整理資料庫核心月報 - 2020 / 01而來。希望對你入門有所幫助。
mysql二級索引
聚集索引葉子節點存放記錄 非聚集索引葉子節點存放key和主鍵資訊 二級索引查詢比聚集索引慢,需要回表 iot表 拆表人肉回表 myisam索引是堆表 也是有序的 myisam主鍵和唯一索引的效率相當,不需要再回表 資料檔案位址修改了,iot不需要修改 myisam適合讀的應用 innodb適合寫 i...
mysql二級索引儲存的值 Mysql二級索引
二級索引 葉子節點中儲存主鍵值,每次查詢資料時,根據索引找到葉子節點中的主鍵值,根據主鍵值再到聚簇索引中得到完整的一行記錄。問題 1.相比於葉子節點中儲存行指標,二級索引儲存主鍵值會占用更多的空間,那為什麼要這樣設計呢?innodb在移動行時,無需維護二級索引,因為葉子節點中儲存的是主鍵值,而不是指...
mysql二級索引 mysql 什麼是二級索引
alter table t1 add index or create index alter table t1 add fulltext index alter table t1 add column,algorithm inplace opimize t1 對於最後兩個用例,alter 會建立乙個...