面试题答案
一键面试复合索引设计
- 字段顺序:将选择性高(即不同值多)的字段放在索引前列。例如,在用户表中,
email
字段通常比gender
字段选择性高,若要建立复合索引,应将email
放在前面。这样能让索引在过滤数据时更高效地缩小范围。 - 业务需求导向:根据实际查询需求确定字段顺序。如果多数查询是根据
category
和price
过滤,那么复合索引应设计为(category, price)
,确保索引能覆盖常用查询。
维护和优化复合索引需注意的方面
- 避免索引失效:
- 查询条件顺序:确保查询条件的顺序与复合索引中字段顺序一致。例如,复合索引为
(a, b)
,查询WHERE a = 'value' AND b = 'value'
能利用索引,而WHERE b = 'value' AND a = 'value'
在某些数据库中可能无法完全利用索引。 - 函数使用:避免在索引字段上使用函数。如
WHERE UPPER(name) = 'VALUE'
会导致索引失效,应改为WHERE name = 'value'
。 - 范围查询:在复合索引中,范围查询(如
>
、<
)后的字段无法使用索引。例如,复合索引(a, b, c)
,查询WHERE a = 'value' AND b > 'value' AND c = 'value'
,c
字段无法利用索引。
- 查询条件顺序:确保查询条件的顺序与复合索引中字段顺序一致。例如,复合索引为
- 定期维护:
- 重建索引:随着数据的插入、更新和删除,索引可能会碎片化。定期重建索引可以优化存储结构,提高查询性能。
- 统计信息更新:数据库依赖统计信息来优化查询计划,定期更新统计信息能确保查询优化器做出更准确的决策。
- 监控索引使用:
- 使用数据库自带工具:如MySQL的
EXPLAIN
关键字,分析查询语句执行计划,查看索引是否被正确使用。若发现索引未被使用,应及时调整查询或索引设计。
- 使用数据库自带工具:如MySQL的