1. 小表
- 原因: 对于记录较少的小表,全表扫描的性能已经非常好,使用索引可能带来的性能提升非常有限,反而增加了维护索引的开销。
- 示例: 只有几十行记录的配置表或状态表。
2. 高频率的插入、更新和删除操作
- 原因: 索引不仅在查询时使用,在插入、更新和删除操作时也需要维护。频繁的写操作会导致索引频繁更新,增加了额外的性能开销。
- 示例: 日志记录表、事务表等需要频繁写入数据的表。
3. 低基数列
- 原因: 如果列的基数(不同值的数量)很低,索引的选择性不高,索引的效果会非常差。例如,对于性别列(只有“男”和“女”两个值),索引不会显著加速查询,反而增加了存储和维护的开销。
- 示例: 布尔值列、状态列(如只有几种状态)。
4. 频繁变化的列
- 原因: 如果某列的值经常变化,维护索引的成本很高,因为每次更新该列的值时,索引也需要更新。
- 示例: 经常更新的积分、余额等动态数据列。
5. 非常长的字符串列
- 原因: 对于非常长的字符串列,创建索引会消耗大量的存储空间,并且索引维护的开销也很大。此类索引通常不适合用于搜索单个词或部分字符串。
- 示例: 大文本字段(如 TEXT 或 LONGTEXT 列)。
6. 没有在查询条件中使用的列
- 原因: 如果一个列从未出现在查询的 WHERE、ORDER BY、GROUP BY 或 JOIN
条件中,创建索引是没有意义的,因为索引不会被使用到。 - 示例: 仅用于显示或计算的列。
7. 临时表
- 原因: 临时表的数据生命周期很短,在表的生命周期内创建和维护索引的开销可能不值得。
- 示例: 复杂查询中的中间结果存储表。
8. 查询优化器不能有效利用的索引
- 原因: 某些情况下,即使创建了索引,查询优化器也可能选择不使用索引。比如,如果索引列上有函数操作,查询优化器可能无法利用索引。
- 示例: 对索引列进行函数转换的查询(如 WHERE LOWER(column_name) = ‘value’)。
1351

被折叠的 条评论
为什么被折叠?



