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的優勢在於範圍查詢
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子句中
的字段不該建立索引
滿足以下條件的字段,才應該建立索引
mysql常用的索引種類
mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度 mysql目前主要有以下幾種索引型別 fulltext,hash,btree,rtree。1.fulltext 即為全文索引,目前只有myisam引擎支援。其可以在create table alter ta...
mysql索引種類(索引種類和建立索引)
一 mysql索引種類 1 加速查詢 查詢普通欄位和查詢有索引字段,哪個方式查詢速度快 根據索引來查字段速度更快 2 建立索引 為userinfo表email欄位建立索引 create index ix name on userinfo 建立欄位email索引檔案,起別名ix name為某個字段建立...
mysql 索引種類
從資料結構角度 1 b 樹索引 o log n 關於b 樹索引,可以參考 mysql索引背後的資料結構及演算法原理 2 hash索引 a 僅僅能滿足 in 和 查詢,不能使用範圍查詢 b 其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多...