K. *_*R. 3 sql-server parallelism temporary-tables table-variable
第一个查询(插入表变量)的时间是第二个查询的两倍。它在执行计划中不使用并行性。
第二个查询(插入临时表)在其执行计划中使用并行性,并且能够在几乎一半的时间内实现结果。
我试图从表函数运行它,因此需要表变量而不是临时表。
执行计划非常复杂,我宁愿不朝那个方向深入(目前)。我想知道是否有人解释或假设为什么第一个 SQL 不使用并行性,而第二个是。
第一的:
DECLARE @TableVar as TABLE (
[Date] [date] NULL,
[B] [int] NULL,
[C] [decimal](5, 3) NULL)
INSERT INTO
@TableVar
SELECT
[Date] = CAST(LO.Dt as Date)
, [B] = DMC.[B]
, [C] = DMC.[C]
FROM
dbo.fnTblFunc1(@DateStart, @DateEnd) AS DMC
INNER JOIN dbo.fnTblFunc2(@DateStart, @DateEnd) AS LO ON DMC.Date = LO.Dt
OPTION (FORCE ORDER )
Run Code Online (Sandbox Code Playgroud)
第二:
CREATE TABLE #TempTbl(
[Date] [date] NULL,
[B] [int] NULL,
[C] [decimal](5, 3) NULL)
INSERT INTO
#TempTbl
SELECT
[Date] = CAST(LO.Dt as Date)
, [B] = DMC.[B]
, [C] = DMC.[C]
FROM
dbo.fnTblFunc1(@DateStart, @DateEnd) AS DMC
INNER JOIN dbo.fnTblFunc2(@DateStart, @DateEnd) AS LO ON DMC.Date = LO.Dt
OPTION (FORCE ORDER )
DROP TABLE #TempTbl
Run Code Online (Sandbox Code Playgroud)
下面从这个问题中引用table variables 和 temp tables 之间的差异。查看并行性部分。
插入(或以其他方式修改)@table_variables 的查询不能有并行计划,#temp_tables 不受这种方式的限制。
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |