我们有以下代码:
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}}过滤。
注意:嵌套查询对我们不起作用,也很慢。
答案 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%'