2

テーブルAlphaには 30,000 行あり、テーブルBetaには 300 万行あります。の PKに関連Betaする外部キー も持っています。AlphaIdAlpha

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
4

2 に答える 2

0

データベース システムに問題がなければ、これら 3 つのクエリは同じクエリ プランになるため、パフォーマンスも同じになります。

インデックスからクエリに応答できるように、データベースにインデックスを付けようとします。

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 に答える