我有这个复杂的查询,我需要优化它。 没有索引需要20毫秒,我想添加一些索引,它更好,现在我有4毫秒。 但我没有任何经验。你能帮助我加快速度吗?
SELECT COUNT(*) FROM(
SELECT user_id FROM times
INNER JOIN tags ON times.user_id = tags.tag_id
INNER JOIN users ON tags.user_nr = users.nr
WHERE (times.time < 1597313)
AND (times.run_id="118")
AND (times.user_id != 109330258)
AND (times.user_id != 0)
AND (times.time != 0 )
AND (times.cell != 1 )
AND (users.category_id="4")
GROUP BY user_id HAVING count(*) == 1
UNION
SELECT user_id FROM times
INNER JOIN tags ON times.user_id = tags.tag_id
INNER JOIN users ON tags.user_nr = users.nr
WHERE (times.run_id="118")
AND (times.user_id != 109330258)
AND (times.user_id != 0 )
AND (times.time != 0 ) AND (times.cell != 1 )
AND (users.category_id="4")
GROUP BY user_id HAVING count(*) > 1
)
我添加了3个索引。
答案 0 :(得分:0)
您还应该尝试索引tags.user_nr,但如果没有查看查询计划,就无法给出明确的答案。
答案 1 :(得分:0)
如果你在谈论MySQL here in Stack Exchange on the database administrator site,你有一个类似的问题,不完全一样,但是OP正在尝试优化像你这样的大查询的性能。请注意第二个答案,它提供了有关热点的有用提示,以便调整您的查询。