mysql索引
索引类型
主键索引
我们设置主键时,默认有主键索引;
alter table 表明 add primary key 表明(列名)
单值索引
一个索引对应一个列;
create index 表名_列名_index on 表名(列名)
组合索引
一个索引对应多个列;
create index 表名_列名_index on 表名(列名1,列名2)
组合索引最左前缀原则,必须出现最左侧的列
假如有a,b,c列,索引为a,b,那么必须出现a才正确;
select * from demo where xx = a and yy = b正确
select * from demo where xx = b and yy = a正确
select * from demo where xx = a and yy = c正确
select * from demo where xx = c and yy = b错误
唯一索引
保证数据唯一,且不为null
全文索引
我们like查询时索引失效,查询效率低,使用全文索引效率高;
查看索引
show index from 表名
何时创建索引
- 主键索引
- 频繁作为查询条件
- 排序的列
- 与其他表关联的列,外键
- 分组的字段
何时不创建索引
- 表记录太少
- 增删改频繁
- where条件用不到
- 数据重复且平均,如性别
聚簇索引
找到了索引就能找到数据
非聚簇索引
找到了索引不能直接找到数据
区别
- innodb的索引为ibd类型文件,索引和数据一块;
- myIsam的索引文件为myi,数据文件为myd类型文件,索引数据分离;
- innodb引擎采用主键索引就是聚簇索引,使用非主键索引查询是非聚簇索引,非主键查询会回表查询出主键索引,通过主键索引来查找数据;
- myIsam引擎只查询主键为聚簇索引,查询其他为非聚簇索引索引;