一、索引的数据结构
B-Tree索引
B+Tree索引,InnoDB使用
关于Tree的解释可以查看这里:
二、使用索引
哪些查询可以使用B-Tree索引?
- 全值匹配
- 匹配最左原则,只是用索引的第一列
- 匹配列前缀,只是用索引的第一列
- 匹配范围值,只是用索引的第一列
- 精确匹配某一列并范围匹配另一列,第一列全值匹配,第二列范围匹配
- 只访问索引的查询
B-Tree索引限制
- 不是按照最左列开始查询
- 不能跳过索引中的列
- 如果查询中某列使用了范围查询,则其右边的列都无法使用索引
三、其他索引
哈希索引,Memory引擎使用,只有精确匹配索引的所有列才有效。
空间数据索引R-Tree,MyISAM支持使用。
全文索引,类似于搜索引擎。
四、索引策略
- 独立的列
- 前缀索引
- 多列索引/索引合并
- 合适的索引列顺序
- 聚簇索引,数据行存放在索引的叶子页,节点页只包含索引列
- 覆盖索引,索引包含所有需要查询的字段的值,无需回表
- 用索引扫描排序
- 压缩(前缀压缩)索引,MyISAM使用前缀压缩来减少索引大小,可以提高性能
- 冗余和重复索引,影响性能,考虑删除
- 未使用的索引,考虑删除
- 索引和锁,InnoDB只有访问行时才回加锁,而索引能够减少InnoDB访问的行数,从而减少锁的数量。