创建高性能的索引

索引

存储引擎用于快速找到记录的一种数据结构(索引的基本功能)
在MySQL中,存储引擎先在索引中找对对应值,根据匹配的索引记录找到对应的数据行。

索引类型

  • B-Tree索引
    1.全值匹配
    2.匹配最左前缀
    3.匹配列前缀
    4.匹配范围值
    5.精确匹配某一列并范围匹配另一列
  • 哈希索引
    1.哈希索引只包含哈希值和行指针,不存储字段值;
    2.不是按索引值顺序存储,无法用于排序;
    3.不支持部分索引
    4.只支持等值比较查询
  • 空间数据索引
  • 全文索引

索引的优点

  • 大大减少服务器需要扫描的数量
  • 帮助服务器避免排序和临时表
  • 将随机I/O变为顺序I/O

高性能的索引策略

  • 独立的列 索引列不能是表达式的一部分
  • 前缀索引 选择足够长的列保证较高的选择性(不重复的索引值和数据表的记录总数的比值),同时又不能太长
  • 多列索引 在多个列上建立独立的单列索引大部分情况下并不能提高MySQL的查询性能
  • 选择合适的索引列顺序 (经验法则:将选择性最高的列放在索引最前列)
    WHERE子句的排序、分组和范围条件等其他因素,可能对查询的性能造成非常大的影响。
  • 聚簇索引 一种数据存储方式,数据行存放在索引的叶子页中。
  • 覆盖索引 一个索引包含(覆盖)所有需要查询字段的值
  • 使用索引扫描来做排序
    索引的列顺序和ORDER BY子句的顺序完全一致,并且所有列的排序都一样时,MySQL才能够使用索引对结果做排序。
    当前导列为常量时(WHERE子句和JOIN子句对这些列指定常量)ORDER BY子句可以不满足索引的最左前缀的要求
  • 压缩(前缀)压缩索引
  • 冗余和重复索引
  • 未使用的索引
  • 索引和锁

你可能感兴趣的:(创建高性能的索引)