MySQL知识总结--索引

B-Tree索引

索引在存储引擎层,不同存储引擎索引工作方式不一样。InnoDB引擎最常使用的是B-Tree索引,实际上是B+Tree数据结构,其相较于B-Tree结构不同的是,B+Tree每个叶子节点都包含一个指向下一个叶子节点的指针。MyISAM使用前缀压缩技术使得索引更小,并使用数据的物理位置引用被索引的行;InnoDB按照原数据格式存储索引的列值,并根据主键引用被索引的行。如果索引列包含order by子句中列,且列顺序一致,则该索引可以用于排序。

可以使用B-Tree索引的查询类型

  • 全值匹配
  • 匹配最左前缀列
  • 匹配列前缀
  • 匹配范围值
  • 精确匹配某一列并范围匹配另一列
  • 只访问索引的查询(覆盖索引)

B-Tree索引的限制

  • 如果不是按照索引的最左列开始查找,则无法使用索引
  • 不能跳过索引中的列
  • 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引

索引的有点

  • 减小了服务器需要扫描的数据量
  • 帮助服务器避免排序和临时表
  • 索引可以将随机I/O变为顺序I/O

高性能的索引策略

独立的列

独立的列是指索引列不能是表达式的一部分,也不能是函数的参数

前缀索引和索引选择性

如果索引列是很长的字符列,则索引会变得大且慢。可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但是这样会降低索引的选择性,索引的选择性是指,不重复的索引值和数据表的记录总数的比值。索引的选择性越高则查询效率越高,因为选择性高的索引可以在查找时过滤掉更多的行。

MySQL知识总结--索引

上一篇:数据库表设计之存储引擎


下一篇:MySQL分区