我们有一张大桌子(16密耳和计数)。 该表的结构是:
id_PIT | id_instrument | id_data_label | 日期| 价值| 注意(可空)
最常用的请求是:
我们将所有日期都放在一个表格中:
INSERT INTO #DTS
SELECT DISTINCT
date DT
FROM Point_in_time
WHERE date BETWEEN @startDate AND @endDate
然后我们这样做:
INSERT INTO #PIT
SELECT Value V, date D
FROM Point_in_time
WHERE id_instrument = @idInstrument
AND id_data_label = @idDataLable
AND date BETWEEN DATEADD(MONTH, -6, @startDate) AND @endDate
最后一个查询是我们对这两个表进行内连接,如下所示:
SELECT
#DTS.DT D,
#PIT.V V
FROM #DTS
left outer JOIN #PIT ON
(SELECT MAX(#PIT.D)
FROM #PIT
WHERE #DTS.DT >= #PIT.D) = #PIT.D
WHERE #DTS.DT BETWEEN @startDate and @endDate
ORDER BY #DTS.DT
所以问题是什么......它需要太长时间(比如50秒)而且它会阻碍我们的发展。我们在Point_in_time上尝试了几个不同的索引,大多数情况下我们认为索引(id_data_label,id_instrument)会有所帮助,但id不会。
任何人都可以帮助我们吗?我们应该使用什么索引,或者我们可以通过其他方式优化我们的数据库。