最近学习mysql,学习的索引的一些总结。
1.哪些索引
- 普通索引
- 唯一性索引
- 主键索引
- 单列索引
- 多列(组合、联合)索引
- 全文索引
- 补充:空间索引
小结:不同的存储引擎支持的索引类型也不一样 InnoDB :支持 B+树。MyISAM : 支持 B树
2.索引的设计原则
-
- 字段的数值有唯一性的限制
-
- 频繁作为 WHERE 查询条件的字段
-
- 经常 GROUP BY 和 ORDER BY 的列
-
- UPDATE、DELETE 的 WHERE 条件列
-
- DISTINCT 字段需要创建索引
-
- 多表 JOIN 连接操作时,创建索引注意事项(连接的索引字段要一直-类型)
-
- 使用列的类型小的创建索引
-
- 使用字符串前缀创建索引
-
- 区分度高(散列性高)的列适合作为索引(性别字段就不适合)
-
- 使用最频繁的列放到联合索引的左侧
-
- 在多个字段都要创建索引的情况下,联合索引优于单值索引
3.哪些情况不适合创建索引
-
- 在where中使用不到的字段,不要设置索引
-
- 数据量小的表最好不要使用索引
-
- 有大量重复数据的列上不要建立索引(对应上面的第9条)
-
- 避免对经常更新的表创建过多的索引
-
- 不建议用无序的值作为索引
-
- 删除不再使用或者很少使用的索引
-
- 不要定义冗余或重复的索引
MySQL8.0索引新特性
- 支持降序索引、
注意 降序索引只对查询中特定的排序顺序有效,如果使用不当,反而查询效率更低。例如,上述
查询排序条件改为order by a desc, b desc,MySQL 5.7的执行计划要明显好于MySQL 8.0。 - 隐藏索引
这种通过先将索引设置为隐藏索引,再删除索引的方式就是软删除 。(算是逻辑删除)