mysql索引是在储存引擎上实现的。不同的储存引擎支持的索引也不同。即使是同一个索引,在不同的储存引擎实现的方式也可能不相同。
mysql索引
B-Tree 最常见的索引,支持大部分储存引擎
B+Tree B-Tree的优化版,默认
Hash 适合储存Key-Value型数据,根据Key快速查询Value,不适合根据数据范围来查找数据
R-Tree 空间索引
Full-Text 全文索引
使用索引的场景
- 全值匹配
- 查找范围
- 匹配最左前缀
- 匹配索引列(联合索引的前列)
- 查询索引值
- 匹配字段前缀
- 精准匹配和范围匹配
- 匹配NULL值
- 链接查询匹配索引
- LIKE 不以匹配符开始时
无法使用索引的场景
- 以通配符开始的LIKE语句
- 数据类型转换
- 联合索引未匹配最左列
- OR语句 (查询条件中存在未创建索引的字段)
- 计算索引值
- 范围条件右侧的列无法使用索引
- 使用<>或!=操作符匹配
- 匹配NOT NULL
- 索引耗时
使用索引提示
使用索引 USE INDEX 提示查询使用的索引优化器
忽略索引 IGNORE INDEX 提示查询忽略索引
强制使用 FORCE INDEX 强制使用
复杂的数据查询可以使用生成列建立索引查询,比如json数据等。