2014-03-13 40 views
0

我有MSSQL 2008 DB中約6M +行的表[數據]。 我需要從中獲取MIN和MAX連接一些表和按特定字段分組。加速MIN,MAX for JOIN和約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字段上都有索引,但這看起來還不夠。

感謝

+0

有沒有'[data]。[created]'上的索引? – DMason

回答

0

假設不需要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)上的索引將覆蓋查詢的索引。由於數據頁面沒有被訪問,這應該也會更快。