私の質問は:節に実行順がありますか?INNER JOIN
?INNERで複数の「オン」条件で注文するJoin
私のテーブルはそれぞれのテーブルに約100万エントリ入っていますので、私はそれらを簡単に結びつける必要があり、私は自分のクエリを最適化したいと思います。ここで
は私の例です:
高価な検証がされているSELECT *
FROM TableA
INNER JOIN TableB ON
(
[costly validations]
)
AND
TableB.Date1 > '2016-01-01' AND
TableA.Date2 > '2016-01-01' AND
TableB.Date1 = TableA.Date2 AND
TableA.Field1 = TableB.Field1 AND
TableA.Field2 = TableB.Field2 AND
TableA.Field3 = TableB.Field3 AND
TableA.Field4 = TableB.Field18
:
検証アイデア:私たちはいくつかの文字列から、私たちは非常に古いアプリケーションでのドル記号($)を除去し、文字列をお金に変換する前に第三者のアプリケーションによって受信されます。サードパーティのアプリケーションが$記号を削除したので、今度は番号から数字を削除しています(oops)。アプリケーションは修正されていますが、データが破損しています。
質問です:ON
句の順序は、クエリのパフォーマンスや最適化に影響しますか?たとえば、私が高価な検証をON
節の最後に置いた場合、変更はありますか(私は私の側には何も見ませんでした)。
T-SQLは私よりスマートなので、私の前提はNo
です。
ので、この:この対
ON
(
[costly validations]
)
AND
TableB.Date1 > '2016-01-01' AND
TableA.Date2 > '2016-01-01' AND
TableB.Date1 = TableA.Date2 AND
TableA.Field1 = TableB.Field1 AND
TableA.Field2 = TableB.Field2 AND
TableA.Field3 = TableB.Field3 AND
TableA.Field4 = TableB.Field18
:
ON
TableB.Date1 > '2016-01-01' AND
TableA.Date2 > '2016-01-01' AND
TableB.Date1 = TableA.Date2 AND
TableA.Field1 = TableB.Field1 AND
TableA.Field2 = TableB.Field2 AND
TableA.Field3 = TableB.Field3 AND
TableA.Field4 = TableB.Field18 AND
(
[costly validations]
)