下面是我的 SQL 查询。
SELECT `left_table`.`right_table_id`, MAX(left_table.add_time) AS max_add_time
FROM `left_table`
LEFT JOIN `right_table` ON `left_table`.`right_table_id` = `right_table`.`id`
WHERE left_table.add_time <= NOW()
AND (
(right_table.some_id = 1 AND right_table.category != -2)
OR
(right_table.another_id = 1 AND right_table.category != -1)
) AND NOT(right_table.category = -3)
AND NOT(right_table.category = -4)
GROUP BY `right_table_id`
ORDER BY `max_add_time` DESC, `left_table`.`id` DESC
LIMIT 12
执行此查询需要5356.6ms
。对我来说这需要太长时间。我一直在努力加快执行时间。但没有结果。如何提高上述查询的执行时间?
最佳答案
嗯。 。 。我首先会编写这样的逻辑:
SELECT COUNT(DISTINCT lt.`right_table_id`)
FROM `left_table` lt LEFT JOIN
`right_table` rt
ON lt.`right_table_id` = rt.`id`
WHERE lt.add_time <= NOW() AND
((rt.some_id = 1 AND rt.category <> -2) OR
(rt.another_id = 1 AND rt.category <> -1)
) AND
rt.category NOT IN (-3, -4);
可能还有其他简化,具体取决于 lt.right_table_id
是否始终与右表中的行匹配(或者为 NULL
)。以及其他各种考虑因素。
关于mysql - 如何加快MySQL数据库中SQL查询的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45037728/