✅设计索引的时候有哪些原则?

典型回答

  1. 考虑查询的频率和效率:在决定创建索引之前,需要分析查询频率和效率。对于频繁查询的列,可以创建索引来加速查询,但对于不经常查询或者数据量较少的列,可以不创建索引。

  2. 选择适合的索引类型:MySQL提供了多种索引类型,如B+Tree索引、哈希索引和全文索引等。不同类型的索引适用于不同的查询操作,需要根据实际情况选择适合的索引类型。

  3. 考虑区分度:尽量不要选择区分度不高的字段作为索引,比如性别。但是也并不绝对,对于一些数据倾斜比较严重的字段,虽然区分度不高,但是如果有索引,查询占比少的数据时效率也会提升。

✅区分度不高的字段建索引一定没用吗?

  1. 考虑联合索引:联合索引是将多个列组合在一起创建的索引。当多个列一起被频繁查询时,可以考虑创建联合索引。

  2. 考虑索引覆盖:联合索引可以通过索引覆盖而避免回表查询,可以大大提升效率,对于频繁的查询,可以考虑将select后面的字段和where后面的条件放在一起创建联合索引。

✅什么是回表,怎么减少回表的次数?

  1. 避免创建过多的索引:创建过多的索引会占用大量的磁盘空间,影响写入性能。并且在数据新增和删除时也需要对索引进行维护。所以在创建索引时,需要仔细考虑需要索引的列,避免创建过多的索引。

✅联合索引是越多越好吗?

  1. 避免使用过长的索引:索引列的长度越长,索引效率越低。在创建索引时,需要选择长度合适的列作为索引列。对于文本列,可以使用前缀索引来减少索引大小。

  2. 合适的索引长度:虽然索引不建议太长,但是也要合理设置,如果设置的太短,比如身份证号,但是只把前面6位作为索引,那么可能会导致大量锁冲突。

  3. 执行计划分析:多用执行计划分析,因为随着数据库的数据量变化、索引数量变化,最终使用的索引可能也不太一样,所以需要经常查看索引是否有使用对。

✅为什么MySQL会选错索引,如何解决?

原文: https://www.yuque.com/hollis666/xkm7k3/ygxb9f