表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
子句与 Alpha
和Beta
表进行比较是否有任何价值?
WHERE
Alpha.Id = @alphaId
AND Beta.AlphaId = @alphaId
答案 0 :(得分:1)
回答主题中的问题:
“如果我改变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中,在最好的情况下,数据库甚至不必点击硬盘来回答查询。