MS-SQL内连接。更多加入条件与OR相结合 - 更快?

时间:2016-11-21 17:04:46

标签: sql-server

我有一个内部联接,像这样:

select 
  *  /*I define explicit columns*/ 
from
   sometable p
   innerjoin relatedtable t on
       t.sometablekey = p.sometablekey
       or t.sometablekey_2 = p.sometablekey--with this one, it runs a lot faster
where
   /*some where clauses, on both tables*/

在连接中没有“或条件”,它运行得更慢(实际上 - 这么慢,我没有等待结果)。

目前t.sometablekey和t.sometablekey_2都没有任何索引(目前正在构建那些,不知道是否有帮助)。

所以 - 我的问题......怎么可能,查询运行速度快得多?优化器是否会疯狂并选择一些真正糟糕的查询策略?

我只是无法绕过它嘿嘿;)

此致

Johannes Colmsee

PS:那些指数现在已经完成了......现在......如果我排除“或条件”,它会以相同的速度运行......(实际上是没有或者现在快一点的那个,正如预期的那样。我做的实际查询 - 没有行满足“或条件”btw。)

P.P.S:

问题第2部分:我介绍了那些“sometablekey”和“sometablekey_2”,以提高性能。 在加入之前是这样的:

inner join relatedtable t on
 t.propa = p.propa
 and t.propb = p.propb
 and t.propc = p.propb
 or
 (
    t.propd_1 = p.propd
    or
    t.propd_2 = p.propd
 )

我期待获得巨大的性能提升,但只有20%。 可能是,新的“真正的FK”关系并不是那么快,因为我们使用 varchar(40)作为字段(这有点次优,当你应该使用一些数字类型或guid)。

P.P.S:查询计划从来没有提到任何缺失索引btw,尽管 - 它是有益的,因为评论者已经说过并且我自己的观察证明了。 (在开始这篇文章时已经建立了指数)

0 个答案:

没有答案