性能比较

时间:2014-04-18 08:33:37

标签: sql-server

我有两个查询来实现相同的结果......

SET 
  @SalesPersonID = (SELECT SUBSTRING((SELECT DISTINCT ' ,' + CAST(AssignedTo AS NVARCHAR(MAX)) 
                    FROM dbo.CustomerCall 
                    WHERE CompanyID = @Companyid 
                      AND ISNULL(isDeleted, 0) = 0  
                      AND AssignedTo IN (SELECT UserID FROM dbo.users 
                                         WHERE IsActivatedUser = 1) 
                    FOR XML PATH('')), 3, 8000)) 

SELECT 
   @SalesPersonID = COALESCE(@SalesPersonID + ',', ' ') + ' ' +  CAST(AssignedTo AS NVARCHAR(MAX)) 
FROM 
   dbo.CustomerCall  
WHERE 
   CompanyID = 1660 
   AND ISNULL(isDeleted, 0) = 0  
   AND AssignedTo IN (SELECT UserID FROM dbo.users WHERE IsActivatedUser = 1)

哪种表现更好?

事情是我之前使用过xml方法,我的大四学生表示这是非常糟糕的表现......我向他展示了执行计划xml计划略微好于47%,但他还没准备接受。再次争辩说现在数据较少(大约1k行),因此执行得很快,如果数据增加(比如100k行)...那么需要对这两种方法做一些澄清......

2 个答案:

答案 0 :(得分:0)

作为比较查询性能的提示,您可以在Management Studio的新查询窗口中编写它们,然后单击Include Actual Execution Plan按钮,然后立即运行它们,然后在结果窗口中转到{{ 1}}有sql执行计划,如果性能相同,你可以看到Execution Plan应该是50%,但如果其中一个成本更低,那么它的性能会更好。

见下图

enter image description here

答案 1 :(得分:0)

首先,这些是针对不同表格的两个不同查询,因此无法并排比较。

如果您对两种字符串连接方法之间的区别感兴趣,请始终使用第一种方法(利用FOR XML PATH),不仅仅是出于性能原因 - 它受支持,订单有保证。