У меня этот сложный запрос, и мне нужно его оптимизировать. Без индексов требуется 20 мс, я добавил некоторые индексы, лучше, теперь у меня 4 мс. Но у меня нет опыта. Можете ли вы помочь мне сделать это еще быстрее?Как оптимизировать sql-запрос с индексами
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 указателя.
- таблица тегов - TagID
- таблица раз - user_id
- стол пользователя - Nr
Это MySQL или SQLite? Вы отметили как – pickypg
«его лучше, теперь мне нужно 4 мс». Сколько это сейчас? Сколько у вас данных в этих таблицах? Как вы определили, какие индексы добавить? Как выглядит запрос (объяснение)? – Oded
его sqlite (тег удален), теперь у меня есть 4 мс (отредактировано) – Meloun