この複雑なクエリがあり、それを最適化する必要があります。インデックスがないと 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 つ追加しました。
- テーブルタグ - tagid
- テーブルタイム - user_id
- テーブル ユーザー - 番号