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



我正在尝试对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查询造成了一些麻烦?

您可能应该查看执行计划缓存和重用

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

最新更新