MS SQL Server:批处理中的多个查询是否并行执行,如果是,当第二个查询依赖于第一个查询时会发生什么?

J.D*_*.D. 7 sql-server parallelism sql-server-2008-r2 temporary-tables sql-server-2017

如果我有一批两个不同的SELECT语句,是否可以并行执行它们(如果 SQL 优化器认为它是最有效的执行方法)?

如果第一个SELECT语句选择到临时表中,SELECT然后第二个语句插入到同一个临时表中,这是否会阻止两个语句并行运行?

(我猜答案是肯定的,是的 :)。

Han*_*non 10

批处理语句只能按照它们在批处理中出现的顺序连续执行。

现在,如果您有两个语句由两个不同的批次发送到服务器,它们独立运行,并且基本上同时运行(锁定和锁定放在一边)。

以下面的代码为例:

CREATE TABLE #t
(
    i int
);

INSERT INTO #t (i) VALUES (0);
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE之前始终运行INSERT INTO的语句。考虑一下:

SELECT 1;

SELECT 2;
Run Code Online (Sandbox Code Playgroud)

上面的代码总是会按顺序SELECT 1运行,即运行,然后完成后SELECT 2运行。

有多种方法可以同时运行独立的批处理,包括使用多个活动结果集或 MARS,但是这些方法都不会影响单个批处理中语句的串行处理。