我有一个事件表,其中包含大约 100k 行。以下是对“事件”表的复杂查询,希望对如何优化此查询提出您的意见...
SELECT id FROM event
NATURAL JOIN (
SELECT subj_id, max(timestamp) AS timestamp
FROM event WHERE (
timestamp >= 1342052128597 AND timestamp <= 9223372036854775807
AND NOT subj_interpretation = 46))
GROUP BY subj_id)
GROUP BY subj_id
ORDER BY
timestamp DESC
查询在 0.06-0.07 秒内执行。任何想法有什么好的指标和/或查询的重组。
目前我正在使用:
CREATE INDEX event_subj_id ON event(subj_id, timestamp, subj_interpretation)
查询计划如下所示:
1 0 0 SCAN TABLE event USING COVERING INDEX event_subj_id (~27777 rows)
0 0 1 SCAN SUBQUERY 1 (~100 rows)
0 1 0 SEARCH TABLE event USING INDEX event_subj_id (subj_id=? AND timestamp=?) (~9 rows)
0 0 0 USE TEMP B-TREE FOR GROUP BY
0 0 0 USE TEMP B-TREE FOR ORDER BY