Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态插入临时查询将挂起数小时_Sql_Sql Server_Performance - Fatal编程技术网

Sql 动态插入临时查询将挂起数小时

Sql 动态插入临时查询将挂起数小时,sql,sql-server,performance,Sql,Sql Server,Performance,上面的查询是从存储过程中的动态SQL构造的。连接中涉及的表实际上是通过变量读取的。对于少量数据,此查询也会挂起 1如果根据以上条件进行选择,查询结果仍然为0条记录。对于插入,它会挂几个小时 2此查询上没有阻止程序 注意:由于当其他表传递给变量时,这是动态查询,因此此查询运行平稳。它仅与特定表有问题。我确实在那个表上更新了统计数据并重建了索引。没用 这可能是经典的参数嗅探,您可以在此处阅读更多内容: 有一种方法可以提高此类查询的性能,在查询中使用“重新编译”选项 您需要在查询结束时包含 您还可以对

上面的查询是从存储过程中的动态SQL构造的。连接中涉及的表实际上是通过变量读取的。对于少量数据,此查询也会挂起

1如果根据以上条件进行选择,查询结果仍然为0条记录。对于插入,它会挂几个小时

2此查询上没有阻止程序

注意:由于当其他表传递给变量时,这是动态查询,因此此查询运行平稳。它仅与特定表有问题。我确实在那个表上更新了统计数据并重建了索引。没用

这可能是经典的参数嗅探,您可以在此处阅读更多内容:

有一种方法可以提高此类查询的性能,在查询中使用“重新编译”选项

您需要在查询结束时包含 您还可以对每个变量使用未知值,如下所示:

INSERT INTO #TEMP(ID,CID,STS,ETL_NBR,T_ID)
    SELECT STG.ID,STG.CID,STG.STS,STG.ETL_NBR,STG.T_ID 
    FROM DBO.A_STAGE STG(NOLOCK) 
    INNER JOIN DBO.A_PRE PRE(NOLOCK)
    ON PRE.ID=STG.ID AND PRE.CID=STG.CID 
    WHERE PRE.STS = 'D'
    AND STG.ETL_NBR < PRE.ETL_NBR
您可以在此处阅读更多内容:

PRE.CID=STG.CID

此特定联接具有NULL和空格。它不是唯一的或PK列。因此是缓慢的。我通过添加PRE.CID NOT NULL在Join中排除了它们


查询现在运行得很快

谢谢你的快速回复。“重新编译”选项已存在于存储过程级别。您希望我也在查询级别添加吗?其次,我所说的变量是在存储过程中定义的。它们不能通过参数传递。
OPTION (OPTIMIZE FOR (@variable 1UNKNOWN, @variable2 UNKNOWN, ....))