天天看點

mysql常見索引類型_mysql常用的索引種類

一、索引

MySQL索引的建立對于MySQL的高效運作是很重要的,索引可以大大提高MySQL的檢索速度

二、索引類型

Mysql目前主要有以下幾種索引類型:FULLTEXT,HASH,BTREE,RTREE。

1. FULLTEXT

即為全文索引,目前隻有MyISAM引擎支援。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不過目前隻有 CHAR、VARCHAR ,TEXT 列上可以建立全文索引。全文索引并不是和MyISAM一起誕生的,它的出現是為了解決WHERE name LIKE “%word%"這類針對文本的模糊查詢效率較低的問題。

2. HASH

由于HASH的唯一(幾乎100%的唯一)及類似鍵值對的形式,很适合作為索引。HASH索引可以一次定位,不需要像樹形索引那樣逐層查找,是以具有極高的效率。但是,這種高效是有條件的,即隻在“=”和“in”條件下高效,對于範圍查詢、排序及組合索引仍然效率不高。

3. BTREE

BTREE索引就是一種将索引值按一定的算法,存入一個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次周遊node,擷取leaf。這是MySQL裡預設和最常用的索引類型。

4. RTREE

RTREE在MySQL很少使用,僅支援geometry資料類型,支援該類型的存儲引擎隻有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對于BTREE,RTREE的優勢在于範圍查找

三、索引種類

普通索引:僅加速查詢

唯一索引:加速查詢 + 列值唯一(可以有null)

主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中隻有一個

組合索引:多列值組成一個索引,專門用于組合搜尋,其效率大于索引合并

全文索引:對文本的内容進行分詞,進行搜尋

四、索引操作

1.建立索引

--建立普通索引

CREATE INDEX index_name ON table_name(col_name);--建立唯一索引

CREATE UNIQUE INDEX index_name ON table_name(col_name);--建立普通組合索引

CREATE INDEX index_name ON table_name(col_name_1,col_name_2);--建立唯一組合索引

CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

ALTER TABLE table_name ADD INDEX index_name(col_name);

2.刪除索引

-- 直接删除索引

DROP INDEX index_name ON table_name;

-- 修改表結構删除索引

ALTER TABLE table_name DROP INDEX index_name;

3.檢視索引

#檢視:

show index from `表名`;

#或

show keys from `表名`;

4.其他指令

--檢視表結構

desc table_name;--檢視生成表的SQL

show create table table_name;

五、索引機制

1.為什麼我們添加完索引後查詢速度為變快?

傳統的查詢方法,是按照表的順序周遊的,不論查詢幾條資料,mysql需要将表的資料從頭到尾周遊一遍

在我們添加完索引之後,mysql一般通過BTREE算法生成一個索引檔案,在查詢資料庫時,找到索引檔案進行周遊(折半查找大幅查詢效率),找到相應的鍵進而擷取資料

2.索引的代價

2.1建立索引是為産生索引檔案的,占用磁盤空間

2.2索引檔案是一個二叉樹類型的檔案,可想而知我們的dml操作同樣也會對索引檔案進行修改,是以性能會下降

3.在哪些column上使用索引?

3.1較頻繁的作為查詢條件字段應該建立索引

3.2唯一性太差的字段不适合建立索引,盡管頻繁作為查詢條件,例如gender性别字段

3.3更新非常頻繁的字段不适合作為索引

3.4不會出現在where子句中的字段不該建立索引

六、總結

滿足以下條件的字段,才應該建立索引

肯定在where條經常使用

該字段的内容不是唯一的幾個值

字段内容不是頻繁變化。