首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MSSQL存储过程执行计划中没有显示并行插入。

在MSSQL存储过程执行计划中没有显示并行插入。
EN

Database Administration用户
提问于 2022-07-28 05:03:35
回答 1查看 49关注 0票数 0

正如您在上面的屏幕截图中所看到的,这个查询提供了一个并行插入:

代码语言:javascript
复制
INSERT INTO #StateAllocationData WITH (TABLOCK)
  (ProjectID,StateId,StateLineDescriptionId,PartnerID,Value)  
SELECT @ProjectID as ProjectID,sld.StateId,sld.ID,TaxReturnPartnerNumber,0 as Value  
FROM Meta.States S(NOLOCK)  
   LEFT JOIN Meta.StateAllocationLineDescriptions SLD(NOLOCK) ON S.StateId = SLD.StateId  
   join Ottp.PartnerData PD on ProjectID=@Projectid  
WHERE  SLD.isDeleted = 0 AND SLD.ID IS NOT NULL  

但是,正如您在上面的屏幕截图中所看到的,这个查询不执行并行插入,我想知道为什么:

代码语言:javascript
复制
INSERT INTO  #SAmt WITH (TABLOCK) (ProjectID,StateId,K1SummaryID,StateLineDescriptionId)  
SELECT @ProjectID AS 'ProjectID',  
     S.StateId,  
     SLD.StateLineDescriptionId AS 'K1SummaryID',  
     SLD.ID AS 'StateLineDescriptionId'  
FROM Meta.States S(NOLOCK)  
    LEFT JOIN Meta.StateAllocationLineDescriptions SLD(NOLOCK) ON S.StateId = SLD.StateId  
WHERE --SLD.isK1Summary <> 0 and  
      SLD.isDeleted = 0  
     AND SLD.ID IS NOT NULL  
EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-07-28 08:56:11

显然,查询是不一样的。在第一个查询中,您试图使用.@ProjectID,在第二个查询中没有。

试着使用

代码语言:javascript
复制
SET STATISTICS TIME ON
GO 
--query 1
GO
--query 2
GO
SET STATISTICS TIME OFF 
GO

比较第一次和第二次查询的CPU时间和经过的时间。

有时,Server决定不使用并行插入来使用更少的资源(例如,更少的cpu时间),而查询最终会变得更慢(占用的时间更长)。

如果您拥有Server 2016或更高版本,则可以尝试使用以下非文档查询提示,以查看在每个查询结束时通过OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))并行执行是否更快。请注意,像这样的无文档化的特性只应该在非生产环境中使用,并且只用于测试目的,除非您愿意承担将来在没有通知的情况下更改特性的风险,这可能会破坏您的代码。

例如:

代码语言:javascript
复制
INSERT INTO #SAmt WITH (TABLOCK)
(
    ProjectID,
    StateId,
    K1SummaryID,
    StateLineDescriptionId
)
SELECT @ProjectID AS 'ProjectID',
       S.StateId,
       SLD.StateLineDescriptionId AS 'K1SummaryID',
       SLD.ID AS 'StateLineDescriptionId'
FROM Meta.States S (NOLOCK)
    LEFT JOIN Meta.StateAllocationLineDescriptions SLD (NOLOCK)
        ON S.StateId = SLD.StateId
WHERE --SLD.isK1Summary <> 0 and  
    SLD.isDeleted = 0
    AND SLD.ID IS NOT NULL
OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'));
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/314959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档