Sql 具有多个外部应用行比较性能的大型表

Sql 具有多个外部应用行比较性能的大型表,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我有一个大表,其中包含一个如下所示的示例查询,用于检索匹配的结果 Select col1,col2,col3 from Table1 T1 OUTER APPLY (select col2 from Table2 Where t2id=T1.id) OUTER APPLY (select col3 from Table3 Where t3id=T1.id) Where col3>0 问题是当我有Where子句列值检查时,它的运行速度非常慢 我尝试了不同的方法,包括交叉应用,但性能没有任何

我有一个大表,其中包含一个如下所示的示例查询,用于检索匹配的结果

Select col1,col2,col3
from
Table1 T1
OUTER APPLY (select col2 from Table2 Where t2id=T1.id)
OUTER APPLY (select col3 from Table3 Where t3id=T1.id)
Where col3>0
问题是当我有Where子句列值检查时,它的运行速度非常慢

我尝试了不同的方法,包括交叉应用,但性能没有任何改善


有什么想法吗?

尝试在select语句中移动where子句。这将减少要计算的行数,从而加快计算速度

Select col1,col2,col3
from
Table1 T1
OUTER APPLY (select col2 from Table2 Where t2id=T1.id)
OUTER APPLY (select col3 from Table3 Where t3id=T1.id Where col3>0)

查询后计划…加上表的achema den,再加上在这些表上定义的索引,因为您要与第二个外部应用中的列进行比较,所以不需要将其设置为外部,但可以将其改为交叉应用。可能会对查询计划造成影响。只是一个愚蠢的问题:此查询不能重写为
从表1中选择T1.col1、T2.col2、T3.col3 T1.id=T2.t2id左连接表2 T2在T1.id=T3.t3id上选择T1.col1、T2.col2、T3.col3,其中T3.col3>0
?如果答案是肯定的,那么这个查询是更快、更慢还是需要相同的时间?@Macro我们不能这样做,因为一些应用程序使用FREETEXTTABLE来计算匹配的排名。我也尝试过使用多个通用表表达式,并对其进行交叉应用,但保留col3>0检查。这似乎帮不了什么忙。col3是一个计算列,不知道为什么这个过滤器会使查询变得如此缓慢!