SQL Server中的查询优化器

时间:2012-10-22 15:19:52

标签: sql sql-server-2008-r2 query-optimization

我们有以下代码:

select * from View1 where (Timestamp >= @x) and (SomeCode like 'ABC%')

非常慢。但代码

select * from View1 where (Timestamp >= @x)      (*)

非常快。此外,SomeCode like...过滤器在前一个(*)代码上运行得非常快。所以,两阶段时速度很快。 (View1是CLR计算视图。)

问题:如何建议SQL Server 2008 R2分两个阶段进行查询(更确切地说,两个过滤器),即首先是Timestamp过滤器,然后是{ {1}}过滤。

注意:嵌套查询对我们不起作用,也很慢。

1 个答案:

答案 0 :(得分:-2)

可能有更好的方法,但这个方法对我有用:

SELECT * from (SELECT * FROM View1 WHERE Timestamp >= @x) x
WHERE field_x LIKE 'ABC%'

这会强制首先运行快速查询。

回应评论:

也许“武力”不是正确的词,但我肯定观察到它有所作为。如果有人有更好的建议,我会修改这个。

回复您的评论:

“不起作用”=还是慢?

在哪种情况下:是否将时间戳列编入索引? SQL Server是否在具有较大查询的资源(内存,磁盘空间)上运行不足?你看过执行计划了吗?

如果确实强制解决问题,会发生什么:

SELECT * into #tmp FROM View1 WHERE Timestamp >= @x
SELECT * from #tmp WHERE field_x LIKE 'ABC%'