我有一个视图,使用CTE从表中返回2个整数.如果我查询这样的视图,它会在不到一秒的时间内运行
SELECT * FROM view1 WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样查询视图需要4秒钟.
DECLARE @id INT = 1
SELECT * FROM View1 WHERE ID = @id
Run Code Online (Sandbox Code Playgroud)
我检查了2个查询计划,第一个查询正在主表上执行Clustered index seek返回1个记录,然后将其余的视图查询应用于该结果集,其中第二个查询正在执行索引扫描,即返回大约3000条记录而不仅仅是我感兴趣的记录,然后过滤结果集.
有没有明显的东西我试图让第二个查询使用Index Seek而不是索引扫描.我正在使用SQL 2008,但我所做的任何事情都需要在SQL 2005上运行.起初我认为这是某种参数嗅探问题,但即使清除缓存,我也会得到相同的结果.