索引
存储引擎用于快速找到记录的一种数据结构(索引的基本功能)
在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子句可以不满足索引的最左前缀的要求 - 压缩(前缀)压缩索引
- 冗余和重复索引
- 未使用的索引
- 索引和锁