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條經常使用
  • 該字段的內容不是唯一的幾個值
  • 字段內容不是頻繁變化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM