【发布时间】:2014-02-10 13:32:14
【问题描述】:
我正在尝试在 SQL Server 数据库上执行一个相当“大”的查询:
SELECT *, (SELECT MAX(data) FROM another_sample_table) as max_data
FROM sample_test_1 st1
LEFT JOIN sample_table_2 st2 ON (st2.date = st1.date)
LEFT JOIN sample_table_3 st3 ON (st3.id = st2.id)
LEFT JOIN sample_table_4 st4 ON (st4.code = st1.code)
-- Two ohter LEFT JOINs
WHERE st1.date = '2000-01-01'
AND st4.code IN ('EX1') -- and a list of code
预期行为:
第一次执行查询大约需要 1 分钟。 我认为这是索引问题。预期的行为应该是每次执行查询时,执行时间应该或多或少在 1 分钟左右。
实际结果:
查询执行第2、3、4等次时,执行时间变为1秒。
问题:
SQL Server 2008 的哪些技术方面可以解释这种行为?数据库是否将结果保存在某种缓存中一段时间然后将其删除?还是SELECT MAX(data) FROM another_sample_table 查询引起了一些麻烦?
【问题讨论】:
-
'预热缓冲区缓存' - 即将数据从磁盘读入内存
标签: performance sql-server-2008 execution