具有内部联接的大型表中的SQL索引

时间:2015-01-22 15:57:51

标签: mysql sql sql-server indexing inner-join

我们有一张大桌子(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不会。

任何人都可以帮助我们吗?我们应该使用什么索引,或者我们可以通过其他方式优化我们的数据库。

0 个答案:

没有答案