我正在尝试在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
查询?
答案 0 :(得分:0)
您应该查看Execution Plan Caching and Reuse
SQL Server有一个内存池,用于存储两个执行 计划和数据缓冲。分配给两者的池的百分比 执行计划或数据缓冲区动态波动,具体取决于 系统的状态。用于的内存池的一部分 存储执行计划称为过程缓存。