2つの異なるSELECT
ステートメントのバッチがある場合、それらを並行して実行することは可能ですか(SQLオプティマイザが最も効率的な実行方法であると判断した場合)?
最初のSELECT
ステートメントが一時テーブルに選択していて、2番目のSELECT
ステートメントが同じ一時テーブルに挿入している場合、2つのステートメントが実行されるのを防ぐことができます平行?
(私は答えがイエスとイエスだと思います:)。
バッチステートメントは、バッチに表示される順序でのみ連続して実行されます。
これで、2つの異なるバッチによってサーバーに送信された2つのステートメントがある場合、それらはwill独立して、本質的に同時に実行されます(ロックとラッチは別です)。
たとえば、次のコードを見てください。
CREATE TABLE #t
(
i int
);
INSERT INTO #t (i) VALUES (0);
CREATE TABLE
は常にINSERT INTO
ステートメントの前に実行されます。このことを考慮:
SELECT 1;
SELECT 2;
上記のコードは常に順番に実行されます。つまり、SELECT 1
はfirstを実行し、完了後はSELECT 2
を実行します。
Multiple Active Result Sets、またはMARS の使用など、独立したバッチを同時に実行する方法は複数ありますが、単一のバッチ内のステートメントのシリアル処理には影響しません。