我有一个数据库表,每天接收近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 –