我有一個數據庫表,每天接收近100萬條插入,至少需要一年可搜索。大硬盤和大量數據,而不是那麼棒的硬件。優化SQL Server查詢/表
表看起來是這樣的:
id | tag_id | value | time
----------------------------------------
279571 55 0.57 2013-06-18 12:43:22
...
tag_id
可能是這樣的AmbientTemperature
或AmbientHumidity
當讀數從傳感器所用的時間被捕獲。
我在報表格式上查詢此表格。我希望在2013-11-1和2013-11-28之間以1小時的間隔查看標籤1,55,72和4的所有數據。
SELECT time, tag_id, tag_name, value, friendly_name
FROM (
SELECT time, tag_name, tag_id, value,friendly_name,
ROW_NUMBER() over (partition by tag_id,datediff(hour, 0, time)/1 order by time desc) as seqnum
FROM tag_values tv
JOIN tag_names tn ON tn.id = tv.tag_id
WHERE (tag_id = 1 OR tag_id = 55 OR tag_id = 72 OR tag_id = 4)
AND time >= '2013-11-1' AND time < '2013-11-28'
) k
WHERE seqnum = 1
ORDER BY time";
我可以優化這個表或我的查詢麼?我應該如何設置我的索引?
這是非常緩慢的表大小爲1億+行。可能需要幾分鐘的時間才能以查詢中的3個標籤以小時間隔獲得7天的數據集。
更好地使用您的羣集主鍵索引。以下內容可能會引起您的興趣:http://technet.microsoft.com/zh-CN/library/aa933131(v=sql.80).aspx和http://stackoverflow.com/questions/4419499/mysql-and- nosql -help-me-to-choose-the-right-one/4421601#4421601和http://stackoverflow.com/questions/5451190/60-million-entries-select-entries-from-a-certain-month-如何優化數據庫/ 5451389#5451389 –