【发布时间】:2012-10-22 15:19:51
【问题描述】:
我们有以下代码:
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过滤器。
注意:嵌套查询对我们不起作用,它也很慢。
【问题讨论】:
-
View1是否已编入索引?如果没有,View1下的表是否已编入索引? -
什么是“CLR 计算视图”google.co.uk/…
-
@egrunin,这是不正确的。使用
starts withlike 将允许您使用索引。如果他像你那样做contains或ends with,那就对了。 -
@egrunin - 不正确。如果使用
LIKE而不使用%,则可以使用索引,原因与=(WHERE a LIKE 'hello') 相同,如果第一部分缺少%,它甚至可以使用索引(WHERE a LIKE 'hello%') -
@marc_s :非常清楚。我会把我的错误言论作为例子留给别人看:)
标签: sql sql-server-2008-r2 query-optimization