高性能表连接的高性能WHERE子句

时间:2013-10-16 23:17:42

标签: sql sql-server performance

Alpha有30,000行,表Beta有300万行。 Beta还有一个与AlphaId PK相关的外键Alpha

我在SQL-Server中有一个存储过程,它将@alphaId作为参数。目前,我的代码运行

SELECT Alpha.Id, Alpha.Field1, Alpha.Field2, Beta.Field3, Beta.Field4
FROM
     Alpha
     INNER JOIN Beta ON Alpha.Id = Beta.AlphaId
WHERE
     Alpha.Id = @alphaId

存储过程有点慢。如果我更改WHERE子句而不是过滤Beta

,会加快速度吗?
WHERE
     Beta.AlphaId = @alphaId

WHERE子句与 AlphaBeta表进行比较是否有任何价值?

WHERE
     Alpha.Id = @alphaId
     AND Beta.AlphaId = @alphaId

2 个答案:

答案 0 :(得分:1)

  1. 执行计划说什么,它是否使用索引?
  2. 通常从此存储过程返回多少行?
  3. 有点慢 - 现在需要多长时间以及多长时间“不慢”?
  4. 回答主题中的问题:

    “如果我改变WHERE子句而不是过滤Beta版,会加快速度吗?”

    没有

    “将WHERE子句与BOTH Alpha和Beta表进行比较会有什么价值吗?”

    没有

    两者的原因是相同的 - ms sql将在所有3个案例中进行绝对相同的比较

答案 1 :(得分:0)

如果您的数据库系统有任何好处,那么这三个查询将产生相同的查询计划,从而产生相同的性能。

我尝试索引数据库,以便可以从索引中回答查询:

create index alpha_i on alpha (Id, Field1, Field2)
create index beta_i on beta (alphaId, Field3, Field4)

由于索引通常缓存在RAM中,在最好的情况下,数据库甚至不必点击硬盘来回答查询。