資料庫 MySQL的二級索引

2021-10-17 04:24:28 字數 1412 閱讀 3683

一、前言

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 會建立乙個...