中間の具体化についてのこの興味深い記事を読んだ後、私はまだいくつかの質問があります。
私はこのクエリを持っています:
SELECT *
FROM ...
WHERE isnumeric(MyCol)=1 and ( CAST( MyCol AS int)>1)
ただし、where句の順序は決定論的ではありません。
だから私はここで例外を得るかもしれません(彼が最初にキャストしようとした場合"k1k1"
)
これで問題は解決すると思います
SELECT MyCol
FROM
(SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (MyCol ) > 1 ORDER BY MyCol ) bar
WHERE
CAST(MyCol AS int) > 100
- なぜ置く
top 100 + order
とVS私の通常のクエリが変わるのですか?
私はコメントを読んだ:
(「中間」結果-つまり、プロセス中に取得され、最終結果の計算に使用される結果)はTempDBに物理的に保存(「マテリアライズ」)され、そこから残りのユーザーに使用されます。 、ベーステーブルからクエリバックされる代わりに。
- tempDBに保存されている場合、またはベーステーブルからクエリされている場合、どのような違いがありますか?同じデータです!