web-dev-qa-db-ja.com

MS SQL Server:バッチ内の複数のクエリが並行して実行されることはありますか?その場合、2番目のクエリが最初のクエリに依存しているとどうなりますか?

2つの異なるSELECTステートメントのバッチがある場合、それらを並行して実行することは可能ですか(SQLオプティマイザが最も効率的な実行方法であると判断した場合)?

最初のSELECTステートメントが一時テーブルに選択していて、2番目のSELECTステートメントが同じ一時テーブルに挿入している場合、2つのステートメントが実行されるのを防ぐことができます平行?

(私は答えがイエスとイエスだと思います:)。

6
J.D.

バッチステートメントは、バッチに表示される順序でのみ連続して実行されます。

これで、2つの異なるバッチによってサーバーに送信された2つのステートメントがある場合、それらはwill独立して、本質的に同時に実行されます(ロックとラッチは別です)。

たとえば、次のコードを見てください。

CREATE TABLE #t
(
    i int
);

INSERT INTO #t (i) VALUES (0);

CREATE TABLEは常にINSERT INTOステートメントの前に実行されます。このことを考慮:

SELECT 1;

SELECT 2;

上記のコードは常に順番に実行されます。つまり、SELECT 1firstを実行し、完了後はSELECT 2を実行します。

Multiple Active Result Sets、またはMARS の使用など、独立したバッチを同時に実行する方法は複数ありますが、単一のバッチ内のステートメントのシリアル処理には影響しません。

9
Max Vernon