什么是索引:
索引的概述
MySQL索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用指定的数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
优点:减少查询时间,减少IO堵塞,缓解CPU的压力
缺点:当插入数据时,会频繁更新索引,带来的低效率
索引的结构
BTREE索引:最常见的索引类型,大部分都支持B树索引
HASH:只有Memory引擎支持,R-tree:MYISAM;Full-text:全文索引
主要数据类型是BTREE:
BTREE比二叉树查询效率要高,因为他的层级较少。
B+TREE的结构:
B+tree最多包含n个key,而BTREE有n-1个key
索引分类:
1、单值索引:一张表可以有多个
2、唯一索引:允许包含多个空值
3、复合索引:一个索引中包含了多个列
索引的语法:
1、可以创建时创建,也可以在创建表后再创建索引。
create [unique | fulltext | spatial] index index_name
[using index_type] # default BTREE
on table_name(index_col_name...)
index_col_name : column_name [ ( length ) ] [ ASC | DESC ]
不会对id进行创建索引,因为MySQL的主键是默认带一个主键索引
创建普通索引
删除索引:
drop index index_name on table_name;
修改索引:
alter table tb_name add unique index_name(col_list);
创建的唯一索引。
索引设计原则
?=> 对查询频率较高,且数据量比较大。经常出现在where子句后面的字段。尽量使用唯一索引。适当就可以。使用段索引。利用最左索引。