我正在尝试对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 有一个内存池,用于存储两个执行 计划和数据缓冲区。分配给任一位置的池的百分比 执行计划或数据缓冲区动态波动,具体取决于 系统的状态。内存池中用于 存储执行计划称为过程缓存。