【发布时间】:2019-06-20 01:39:13
【问题描述】:
SELECT `f`.*
FROM `files_table` `f`
WHERE f.`application_id` IN(6)
AND `f`.`project_id` IN(130418)
AND `f`.`is_last_version` = 1
AND `f`.`temporary` = 0
AND f.deleted_by is null
ORDER BY `f`.`date` DESC
LIMIT 5
当我删除 ORDER BY 时,查询会在 0.1 秒内执行。使用 ORDER BY 需要 3 秒。
每个 WHERE 列都有一个索引,并且 ORDER BY 字段(日期)也有一个索引。
我可以做些什么来加快这个查询?为什么 ORDER BY 会减慢它的速度?表格有 3M 行。
【问题讨论】:
-
每列上的索引无助于优化顺序,您需要在手册中创建多列索引以优化顺序dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html
-
所以你是说所有这些字段上的组合索引应该有效,而不是所有列上的单个索引?
-
更新您的问题并添加您的表架构..
标签: mysql optimization indexing sql-order-by query-optimization