我在MSSQL 2008 DB中有大约6M+行的表[数据]。我需要得到最小和最大从那连接一些表和组的特定字段。
这是查询:
SELECT sites.id,
MIN(data.created),
MAX(data.created)
FROM [data] JOIN
[columns] on data.columnID = columns.id
JOIN [sites] on columns.sitesID = sites.id
GROUP BY sites.id
运行大约需要20-25秒,理想情况下应该以毫秒为单位,我相信通过一些智能索引发挥是可能的。
我该怎么做?
目前我在所有JOIN字段上都有索引,但这看起来还不够。
谢谢
假设过滤不需要sites
表,那么您的查询相当于:
SELECT c.sitesID, MIN(d.created), MAX(d.created)
FROM [data] d JOIN
[columns] c
on d.columnID = c.id
GROUP BY c.sitesID;
这可能运行得更快。你有columns(id)
的索引吗?
data(columnId, created)
和columns(id, sitesId)
上的索引将覆盖查询的索引。因为没有访问数据页,所以这也应该更快。