【发布时间】:2010-12-16 09:55:35
【问题描述】:
我有一个使用 CTE 从表中返回 2 个整数的视图。如果我像这样查询视图,它会在不到一秒的时间内运行
SELECT * FROM view1 WHERE ID = 1
但是,如果我像这样查询视图,则需要 4 秒。
DECLARE @id INT = 1
SELECT * FROM View1 WHERE ID = @id
我检查了 2 个查询计划,第一个查询正在对返回 1 条记录的主表执行聚集索引查找,然后将视图查询的其余部分应用于该结果集,而第二个查询正在执行索引扫描返回大约 3000 条记录,而不仅仅是我感兴趣的记录,然后过滤结果集。
在尝试让第二个查询使用索引搜索而不是索引扫描时,我是否缺少任何明显的东西。我正在使用 SQL 2008,但我所做的任何事情也需要在 SQL 2005 上运行。起初我以为这是某种参数嗅探问题,但即使我清除缓存,我也会得到相同的结果。
【问题讨论】:
标签: sql-server performance sql-server-2008