1-Mysql的存储引擎
剧烈
2-索引特点,存储引擎特点及选择
3-Btree:Mylsam表存储引擎的(非聚集索引)
Btree(blance tree)原理
所以可见 Btree 能存的数据很大,哪怕是21亿的数据,我们有索引是需要查找32次,而不是21亿次的全盘扫描.这就是为什么索引快的原因.
3-Btree:InnodDB表存储引擎的(聚集索引)
4-聚集索引和非聚集索引
4.1 聚集索引(InnodDB)
- 页码下面的数字
所以在建立了id为聚集索引后,又建了name为索引,执行 select id,name,age from 表名 where name=a
检索过程是:先从name索引,获取了name的值,但是因为已经有了id为聚集索引,所有name的索引上并没有其他字段的值,会跳到id的这个聚集索引上获取其他的值
4.2 非聚集索引(Mylsam)
- 字典最前面几页的索引,或者书的目录
5-索引的优缺点及原则
5.1 优点:
提高检索速度,降低磁盘的IO
5.2 缺点
索引需要存储,也就需要空间,索引实际上就是一张表,子弹更新(insert,delete,update)会有性能损耗
5.3 原则
适合做索引的字段:
- 频繁作为where条件的字段
- 关联字段可以建索引,例如外键…
- order by col group by col
不适合做索引的:
- where条件中用不到的字段
- 频繁更新的字段
- 数据值发布比较均匀的不适合建索引,例如男女字段,真假值
- 表的数据可以确定行数的,而且数据量很少
6-索引失效
- 什么情况下索引失效
建立单个索引时,
index(name)
建立复合索引情况1时
index(name.age)
select * from user order by age --索引失效,因为name为第一个索引,相当于一楼,age为第二索引,相当于二楼,不能直接到二楼,
select * from user where age=18 and name='张三' --索引失效,也是一样的问题,先到二楼,在到一楼不成立
建立复合索引情况2时
index(name.age)
select * from user where age>18 and name='张三' --部分失效(走age索引了,但name失效)