2

Alpha有 30,000 行,表Beta有 300 万行。Beta还有一个与 PKAlphaId相关的外键。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如果我将子句更改为 filter against会加快速度Beta吗?

WHERE
     Beta.AlphaId = @alphaId

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

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

2 回答 2

1
  1. 什么执行计划说,它使用索引吗?
  2. 这个存储过程通常返回多少行?
  3. 有点慢 - 现在需要多长时间以及“不慢”多长时间?

回答主题中的问题:

“如果我将 WHERE 子句改为过滤 Beta,它会加快速度吗?”

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

两者的原因是相同的 - ms sql 将在所有 3 种情况下进行完全相同的比较

于 2013-10-16T23:23:42.097 回答
0

如果您的数据库系统足够好,那么这三个查询将产生相同的查询计划,从而获得相同的性能。

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

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

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

于 2013-10-16T23:33:44.380 回答