什么时候创建索引
mysql 报表查询几百万数据很慢
把where 字段 group by 字段 或者max,count,sum 的字段可以创建索引提升速度
索引类型
一般索引常用有两种类型 先选择 unique 如果因为存在重复数据报错了 就换成normal
联合索引
举个例子
select max(a),b from xxx group by b;
此时只给b建索引还是很慢,因为虽然查询b快了,但是还要花时间遍历a然后排序,总体时间可能更慢了
如果同时给a和b建立索引,还是很慢,因为a和b没有一起组成索引,相当于各查各的,索引还可能会失效
因此可以给a和b建立联合索引,这样就快了
比如有很多房间很多床,单独索引就是给每个房间或每个床编号,然后根据编号快速查询到房间或床,联合索引相当于给房间和里面的某个床合到一起编一个编号
生效规则:从左往右依次生效,如果某个没用到,断点前生效,断点后不生效
索引原理
不同引擎不一样
innerdb是 b+ 树
还有hash 和 b树
在一段内存里,描述为一段目录和指针
不同索引遍历方式不同
分类:
按照逻辑:主键、 唯一索引、普通、全文
物理:聚簇 和 非聚簇