随着对mysql的使用越来越多,索引这个东西已经是必须要了解的了,所以在此记录一下学习心得,如有误解的地方还请多多指正
1.为什么使用索引
- 使用索引大大的减少了存储引擎需要扫描的数据量
- 减少排序,避免使用临时表
- 把随机I/O变成顺序I/O
2.索引类型
B-tree索引
特点
- 以B+树的结构存储数据
- 加快数据的查询速度
- 适合进行范围查找
使用情况
- 全值匹配的查询
- 匹配最左前缀的查询
- 匹配列前缀查询
- 匹配范围值查询
- 精确匹配做前列并范围匹配另外一列
- 只访问索引的查询
使用限制
- 不按照索引最左列开始查找
- 跳过索引中左边的列
- 使用Not in和in是用不到索引的
- 查询某个列的范围查询,则用不到其余列用不到索引
Hash索引
特点
- 基于Hash表实现
- 只有查询条件精确匹配Hash索引中所有的列时才能使用Hash索引
- 存储引擎会为Hash索引的每一列都计算一个Hash码
使用限制
- 必须进行二次查找(因为是以键值对的形式存储的,先查询键再查询值)
- 无法用于排序
- 不支持部分索引和范围查询
- Hash码可能存在冲突
3索引的不足
- 增加写操作的成本
- 增加查询优化器的选择时间