-1

我们有以下代码:

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过滤器,然后SomeCode过滤器。

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

4

1 回答 1

-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%'
于 2012-10-22T15:22:22.157 回答