mysql索引新增 mysql 建立索引

2021-10-17 11:51:46 字數 2511 閱讀 3640

mysql 索引

內容主要摘抄自《mysql5.7從入門到精通》

索引是對資料庫表中的一列或多列進行排序的一種資料結構,使用索引可以提高資料庫中特定資料的查詢速度。

一、索引含義和特點

索引是乙個單獨的、儲存在磁碟上的資料庫結構,它們包含著對資料表裡所有記錄的引用指標。

mysql 中索引儲存型別有兩種:btree 和 hash,具體和表的儲存引擎相關;myisam 和 innodb 儲存引擎只支援 btree 索引;memory/heap 儲存引擎可以支援 hash 和 btree 索引。

二、索引分類

普通索引和唯一索引

普通索引:定義的索引列執行有空值和重複值。

唯一索引:索引列的值必須唯一,允許有空值。

單列索引和組合索引

單列索引:乙個索引只包含單列。

組合索引:在表的多個字段組合上建立的索引,使用組合索引時遵循最左字首集合,只有查詢條件中使用了這些欄位的左邊字段,索引才會被使用。

全文索引

全文索引型別為 fulltext,在定義索引的列上支援值的全文查詢,允許索引列插入重複值和空值。全文索引可以在字元或文字型別的列上建立,mysql 中只有 myisam 儲存引擎支援全文索引。

空間索引

mysql 空間資料型別有四種:geometry、point、linestring 和 polygon。空間索引是對空間資料型別的字段建立的索引,建立空間索引的列必須宣告為 not null。

三、索引設計原則

索引並非越多越好

乙個表中若有大量索引,會占用磁碟空間,也會影響 insert、delete、update 等語句的效能,因為表中資料更改時,索引也會進行調整和更新。

索引中的列盡可能的少

對經常查詢的字段應該建立索引,但要避免新增不必要的字段。

對資料量小的表不要使用索引

由於資料較少,查詢的花費的時間可能比遍歷索引的時間還要短,可能不會產生優化效果。

在不同值較多的列上建立索引

例如性別欄位上只有「男」,「女」,「其他」,三個不同值,若在性別列上建立索引,可能不但不會提高查詢效率,反而會嚴重降低資料更新速度。

四、查詢表中索引

一般查詢結果顯示的是**形式,在查詢語句後加上 \g 可以將查詢結果縱向顯示。

上圖顯示 id 為唯一索引。

五、建立索引

1. 建立表時建立索引

建立名為 idx_name 的普通索引,對唯一性沒有限制

create table test2 (

id int(11) not null auto_increment,

name varchar(255) not null,

num int(11) not null default 0,

created_at timestamp null default current_timestamp,

primary key (`id`),

index idx_name(name(5))

) engine=innodb default charset=utf8;

index idx_name(name(5))

上面語句指的是擷取字段 name 前5個字元作為索引,也就是說每條記錄的name欄位的值的前5個字元不能出現重複,否則在使用 insert 時會出現 「duplicate」 錯誤。

2. 使用 alter table 語句

alter table test2 add index idx_name(name(5));

3. 使用 create index 語句

create index idx_name on test2(name(5));

六、刪除索引

1. 使用 alter table 刪除

alter table test2 drop index idx_name;

2. 使用 drop index 刪除

drop index idx_name on test2;

七、索引名稱規範

普通索引

"idx_" 字首加上欄位名稱,eg: idx_name

唯一索引

"uniq_"字首加上欄位名稱,eg: uniq_name

八、索引長度限制

長度不超過767bytes,聯合索引長度不超過3072bytes。

九、什麼情況適合建索引?

十、小測試

建立乙個表,字段如下:

批量插入80萬條資料,name長度為30字元左右

建立索引花了3秒多,建立索引後同一條查詢語句,執行時間加快的差不多770倍,對比還是很明顯的

mysql 新增索引

mysql索引原理 1.新增primary key 主鍵索引 mysql alter table table name add primary key column 2.新增unique 唯一索引 mysql alter table table name add unique column 3.新增...

mysql 新增索引

1.新增primary key 主鍵索引 語法 alter table 表名 add primary key 列名稱 mysql alter table table name add primary key column 2.新增unique 唯一索引 語法 alter table 表名 add u...

mysql新增索引

1.新增primary key 主鍵索引 1 alter table table name add primary key column 2.新增unique 唯一索引 alter table table name add unique column 3.新增index 普通索引 如果不定義索引名,...