技术 · 开发实战
复合索引的三个易错点
字段顺序、范围条件与前缀匹配,三者共同决定了索引是否被用上。
顺序决定可用性
复合索引按字段顺序建立结构,查询条件必须从左侧字段开始连续匹配,才能有效利用。跳过首个字段的查询,通常只能退化为全表扫描或索引扫描。
设计时把等值条件字段放在前面,范围条件字段放在后面。这样等值部分能先缩小范围,范围部分再在剩余结果里筛选。
范围条件会截断后续字段
一旦某个字段使用了范围比较,它后面的字段就无法继续用于索引定位。因此把范围字段放在末尾,是复合索引的常见约定。
如果业务确实需要多个范围条件,可以考虑拆成两个索引,或者把其中一个范围条件转成枚举值,用等值条件替代。
最左前缀与排序的配合
索引不仅能加速筛选,也能避免排序开销。当查询的排序字段与索引顺序一致时,数据库可以直接按索引顺序读取,省去额外排序。
但排序方向要注意。混合升降序的查询,需要索引在建立时指定对应方向,否则仍然会走排序。
怎么验证
用执行计划确认三件事:是否命中预期索引、扫描行数是否合理、是否出现临时表或额外排序。改索引之后重新测量,不要凭感觉判断。
另外要留意索引的维护成本。写入频繁的表上堆太多索引,会拖慢插入与更新。定期清理未使用的索引,和新增索引同样重要。
索引之外
索引能解决的是一部分查询问题。表结构设计、数据分布、连接方式同样影响性能。
在数据量增长较快的业务里,分区与归档策略往往比新增索引更有效。定期审视慢查询日志,比凭经验加索引更可靠。
读者留言
共 4 条 · 精选展示这篇可以收藏,字段顺序部分值得反复看。
同意文中对字段顺序的判断,别照搬结论就行。
写得不夸张,把字段顺序的边界说清楚了,难得。
字段顺序这段最有价值,比泛泛而谈的解读好读。补充一句,文中提到的情况因人而异,不要直接照搬。