Sql server 对于select语句,临时表花费的时间太长

Sql server 对于select语句,临时表花费的时间太长,sql-server,performance,Sql Server,Performance,问题在于: LeadsWalkIn=当WORK.WORK\u ID不在工作表中时,从worksheet和WORK.AGRA\u ID=CU.AFFINITY\u GROUP\u ID中选择WorkId,然后1或0结束, 我花了很长时间才抽出时间。 有没有其他方法可以更快地获得相同的结果? 谢谢请在填充工作表后尝试在工作表上创建索引,类似于: CREATE CLUSTERED INDEX [ClusteredIndexName] ON [dbo].[#worksheets] ( [work

问题在于: LeadsWalkIn=当WORK.WORK\u ID不在工作表中时,从worksheet和WORK.AGRA\u ID=CU.AFFINITY\u GROUP\u ID中选择WorkId,然后1或0结束, 我花了很长时间才抽出时间。 有没有其他方法可以更快地获得相同的结果?
谢谢

请在填充工作表后尝试在工作表上创建索引,类似于:

CREATE CLUSTERED INDEX [ClusteredIndexName] ON [dbo].[#worksheets]
(
    [workid] ASC
)

进一步的优化是可能的,但如果您将代码作为文本而不是图像发布,则会更加容易。

鉴于当前的工作表表定义,假设WorkId保证为非空,我将避免使用子查询,而改为使用外部联接操作。我们需要保证匹配的行不会超过一行,这样我们就可以使用DISTINCT或GROUP BY来获得工作ID的唯一列表

 LEFT JOIN ( SELECT DISTINCT WorkId FROM #WORKSHEETS ) w
   ON w.WorkId = WORK.WORK_ID 
然后更改“选择”列表中的表达式,以检查是否存在不匹配的行条件:

   CASE WHEN w.WorkId IS NULL AND ... 

如果工作表不被用于其他任何东西,我会考虑只插入工作ID的唯一值,通过添加一个组或不同于填充工作表表的查询,然后只使用工作表的引用代替内联视图查询W.p> 在工作表上添加适当的索引可以提高联接操作的性能。如果我们只有WorkId的不同值,那么它甚至可能是唯一的索引

示例逻辑:

ex数据:

Work    xxx
-----------
A       A
B       B
x       C
x       D
E       x
F       x
如果你想得到这样的结果,使用左连接:

if WORK.AGRA_ID = CU.AFFINITY_GROUP_ID

Work    xxx    value
--------------------
A       A      0
B       B      0
E       x      1
F       x      1
试试这个:

您的选择您可以选择:

LeadsWalkIn = CASE WHEN (xxx.WorkId is null AND WORK.AGRA_ID = CU.AFFINITY_GROUP_ID) THEN 1 ELSE 0 END,
和您的加入查询添加到上次加入:

Left Join #WORKSHEETS xxx On xxx.WorkId = WORK.WORK_ID

对不起,图像不是很清晰。您可以保存图像,这样就可以了。不要将代码作为图像发布。请将其复制并粘贴为文本。建议的SQL更改假设WorkId在工作表中是唯一的,这可能是一个有效的假设,但我们没有足够的信息知道这实际上是有保证的。我还认为连接谓词需要比较WorkId和WORK.WORK\u ID,而不是WORK.AGRA\u ID。非常感谢。这工作做得很好。