一、概念
索引(index):幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)钧汹。
二相满、優(yōu)勢與劣勢
優(yōu)勢
1)類似于書籍的目錄索引层亿,提高數(shù)據(jù)檢索的效率,降低數(shù)據(jù)庫的IO成本雳灵。
2)通過索引對數(shù)據(jù)進(jìn)行排序棕所,降低數(shù)據(jù)排序的成本,降低CPU的消耗悯辙。
劣勢
1)實(shí)際上索引也是一張表琳省,該表中保存了主鍵與索引字段,并指向?qū)嶓w類的記錄躲撰,所以索引列也是要占用空間的针贬。
2)降低了更新表的速度,如insert,update,delete.因?yàn)楦卤頃r(shí)拢蛋,還要更新索引文件桦他。
三、索引結(jié)構(gòu)
1)BTREE索引:最常見的索引類型谆棱,大部分索引都支持B樹索引快压。
此外還有HASH索引、R-tree索引(空間索引)垃瞧、Full-text索引(全文索引)蔫劣。
2)BTree又叫多路平衡搜索樹。
3)B+Tree結(jié)構(gòu)
4)索引分類
1.單值索引:即一個(gè)索引只包含單個(gè)列个从,一個(gè)表可以有多個(gè)單列索引脉幢。
2.唯一索引:索引列的值必須唯一,但允許有空值嗦锐。
3.復(fù)合索引:即一個(gè)索引包含多個(gè)列嫌松。
四、索引語法
1)創(chuàng)建索引
create index idx_city_name on city(city_name)奕污;
2)查看索引
show index from city萎羔;
3)刪除索引
drop index idx_city_name on city;
4)Alter命令
alter table tb_name add primary key(column_list);
該語句添加一個(gè)主鍵碳默,這意味著索引值必須是唯一的外驱,且不能為NULL? ??
alter? table? tb_name? add? unique index_name(column_list);? ? ? ?
這條語句創(chuàng)建索引的值必須是唯一的(除了NULL外育灸,NULL可能會出現(xiàn)多次)? ?
alter? table? tb_name? add? index index_name(column_list);
添加普通索引, 索引值可以出現(xiàn)多次昵宇。
alter? table? tb_name? add? fulltext? index_name(column_list);? ? ? ? 該語句指定了索引為FULLTEXT磅崭, 用于全文索引
五、索引設(shè)計(jì)原則
? 對查詢頻次較高瓦哎,且數(shù)據(jù)量比較大的表建立索引砸喻。
??索引字段的選擇,最佳候選列應(yīng)當(dāng)從where子句的條件中提取蒋譬。
??使用唯一索引割岛,區(qū)分度越高,使用索引的效率越高犯助。
??但索引數(shù)量不是多多益善癣漆,索引過多,會引入相當(dāng)高的維護(hù)代價(jià)剂买,降低 DML操作的效率惠爽,增加相應(yīng)操作的時(shí)間消耗。
??利用最左前綴瞬哼,N個(gè)列組合而成的組合索引婚肆,那么相當(dāng)于是創(chuàng)建了N個(gè)索引。
??使用短索引坐慰,索引創(chuàng)建之后也是使用硬盤來存儲的较性,因此提升索引訪問的I/O效率,也可以提升總體的訪問效 率结胀。