【发布时间】:2016-12-22 22:16:57
【问题描述】:
我有一个包含以下列的表格:incident_id、creation_date、event_id、signature_id。
而这个子程序(简化版)查询表:
while time1 < end_date and time2 < end_date do
stmt = "SELECT incident_id, COUNT(event_id) AS total
FROM table
WHERE creation_date BETWEEN #{time1} AND #{time2}
AND signature_id IN (29476,9935,16353,35726,40340,45471,36047,
105630,105730,73274)
GROUP BY signature_id "
results = db_connect.fetch_all(stmt)
foreach result in results do
... some post processing ...
end
time1 = time1 + time_step
time2 = time2 + time_step
end
这样做的问题是列没有索引并且行数很大,所以现在性能真的很差。有没有办法在不获取循环内结果的情况下进行查询?
更新:我认为我应该先预先计算循环中的时间范围,然后在 SQL 查询中对所有这些时间范围进行 OR。唯一的问题是 COUNT(event_id),我不知道如何计算每个时间范围。
【问题讨论】:
标签: mysql sql performance