SQL Server:查询执行时间取决于查询执行的次数

时间:2014-02-10 13:32:14

标签: performance sql-server-2008 execution

我正在尝试在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查询?

1 个答案:

答案 0 :(得分:0)

您应该查看Execution Plan Caching and Reuse

  

SQL Server有一个内存池,用于存储两个执行   计划和数据缓冲。分配给两者的池的百分比   执行计划或数据缓冲区动态波动,具体取决于   系统的状态。用于的内存池的一部分   存储执行计划称为过程缓存。