Json создание занимает много времени - PullRequest
0 голосов
/ 30 мая 2018

Я использую SQL Server 2016

У меня есть запрос ниже, который использует View - VW_Merchant

выбор * из 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?

1 Ответ

0 голосов
/ 30 мая 2018

Это ваш запрос:

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...