复合索引遵循最左前缀原则,需按查询条件顺序设计,等值列在前、范围列在后,如(status, created_time)可高效支持WHERE status=1 AND created_time>'2024-01-01'。

在MySQL中,复合索引(也叫联合索引)是提升复杂查询性能的关键手段。当你频繁根据多个字段进行查询、排序或过滤时,合理使用复合索引可以显著减少扫描行数,提高执行效率。
复合索引是基于多个列创建的B+树索引,数据按索引列的顺序排序。例如:
CREATE INDEX idx_name ON table (col1, col2, col3);这个索引会先按 col1 排序,再按 col2,最后按 col3。这意味着索引遵循“最左前缀”原则——只有从最左边开始的连续列才能被有效利用。
比如以下查询能命中该索引:
但下面这些通常无法充分利用索引:
要让复合索引真正起作用,必须结合实际查询语句来设计。考虑以下几点:
ORDER BY 和 GROUP BY 操作若能直接利用索引顺序,可避免额外的排序(filesort)或临时表。
例如:
SELECT * FROM logs WHERE app_id = 100 ORDER BY timestamp DESC LIMIT 10;这时建立 (app_id, timestamp) 索引,就能同时满足过滤和排序需求,执行计划中不会出现 filesort。
注意方向一致性:如果排序是 DESC,而索引默认是升序,某些情况下仍需排序。可在支持的存储引擎(如InnoDB)中通过优化器处理,但最好保持一致。
基本上就这些。关键是理解你的查询模式,按最左匹配、等值在前、范围在后、覆盖优先的原则设计复合索引,就能有效加速复杂查询。
以上就是如何在mysql中使用复合索引加速复杂查询的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号