Sql Json创建需要一段时间

Sql Json创建需要一段时间,sql,sql-server,join,Sql,Sql Server,Join,我正在使用SQL Server 2016 我有下面的查询,它使用的是View-VW_Merchant 选择*from VW_Merchant需要1秒时间加载所有接近18k的记录 我想从该视图的记录中创建自定义json。 我在下面创建了一个查询- 在下面的查询中,有一个名为:-PayerName的标记,它是json中的数组 DECLARE @Merch_Uid AS UNIQUEIDENTIFIER ='SOMEUID' SELECT DISTINCT MerchId, DisplayOrder

我正在使用SQL Server 2016

我有下面的查询,它使用的是View-VW_Merchant

选择*from VW_Merchant需要1秒时间加载所有接近18k的记录

我想从该视图的记录中创建自定义json。 我在下面创建了一个查询-

在下面的查询中,有一个名为:-PayerName的标记,它是json中的数组

DECLARE  @Merch_Uid AS UNIQUEIDENTIFIER ='SOMEUID'
SELECT DISTINCT MerchId, DisplayOrder, TimeStamp ,MerchName,
(
SELECT DISTINCT ISNULL(PayerName,'') PayerName FROM
VW_Merchant WHERE
Merch_Uid=@Merch_Uid AND
MerchId = M.MerchId 
FOR Json PATH ) AS PayerName

FROM VW_Merchant M
WHERE Merch_Uid=@Merch_Uid
上面的查询为我提供了一组完美的记录,但唯一的问题是加载json需要15秒

如果我删除PayerName标记,它将把它减少到5秒

使用PayerName标记可以进行哪些更改以更快地运行查询?

这是您的查询:

DECLARE  @Merch_Uid AS UNIQUEIDENTIFIER ='SOMEUID'
SELECT DISTINCT MerchId, DisplayOrder, TimeStamp, MerchName,
       (SELECT DISTINCT COALESCE(m2.PayerName, '') as PayerName
        FROM VW_Merchant m2
        WHERE m2.Merch_Uid = @Merch_Uid AND
              m2.MerchId = M.MerchId 
        FOR Json PATH
       ) AS PayerName
FROM VW_Merchant M
WHERE m.Merch_Uid = @Merch_Uid;
我将改写为:

SELECT MerchId, DisplayOrder, TimeStamp, MerchName,
       (SELECT DISTINCT COALESCE(m2.PayerName, '') as PayerName
        FROM VW_Merchant m2
        WHERE m2.Merch_Uid = @Merch_Uid AND
              m2.MerchId = M.MerchId 
        FOR Json PATH
       ) AS PayerName
FROM (SELECT DISTINCT MerchId, DisplayOrder, TimeStamp, MerchName
      FROM VW_Merchant M
      WHERE m.Merch_Uid = @Merch_Uid;
     ) M;
然后,我会确保视图有索引来利用
WHERE
过滤。优化视图可能是性能的最佳选择


如果您使用的是SQL Server 2017,我建议您使用
string_agg()

如何将其加入,因为存在多个PayerName,并且必须使用json