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