我有两个查询来实现相同的结果......
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行)...那么需要对这两种方法做一些澄清......
答案 0 :(得分:0)
作为比较查询性能的提示,您可以在Management Studio的新查询窗口中编写它们,然后单击Include Actual Execution Plan
按钮,然后立即运行它们,然后在结果窗口中转到{{ 1}}有sql执行计划,如果性能相同,你可以看到Execution Plan
应该是50%,但如果其中一个成本更低,那么它的性能会更好。
见下图
答案 1 :(得分:0)
首先,这些是针对不同表格的两个不同查询,因此无法并排比较。
如果您对两种字符串连接方法之间的区别感兴趣,请始终使用第一种方法(利用FOR XML PATH
),不仅仅是出于性能原因 - 它受支持,订单有保证。