OPENJSON медленно обрабатывает 3 млн строк из таблицы

#json #sql-server #tsql #open-json

#json #sql-сервер #tsql #open-json

Вопрос:

У меня есть таблица с 3 млн строк JSON.

Я пытаюсь проанализировать JSON и вставить данные в другую таблицу. Но OPENJSON требуется около 50 секунд для анализа 500 тыс. строк.

Запрос, который я использую

 
select   
    top 500000
    qse.*
from 
    dbo.QueryStore qs
    cross apply openjson(qs.Query) 
    with
        (

            Col1 nvarchar(max), Col2 nvarchar(max), Col3 nvarchar(max), Col4 nvarchar(max), Col5 nvarchar(max), Col6 nvarchar(max), Col7 nvarchar(max), Col8 nvarchar(max), Col9 nvarchar(max), Col10 nvarchar(max), Col11 nvarchar(max), Col12 nvarchar(max), Col13 nvarchar(max), Col14 nvarchar(max), Col15 nvarchar(max), Col16 nvarchar(max), Col17 nvarchar(max), Col18 nvarchar(max), Col19 nvarchar(max), Col20 nvarchar(max), Col21 nvarchar(max), Col22 nvarchar(max), Col23 nvarchar(max), Col24 nvarchar(max), Col25 nvarchar(max), Col26 nvarchar(max), Col27 nvarchar(max), Col28 nvarchar(max), Col29 nvarchar(max), Col30 nvarchar(max), Col31 nvarchar(max), Col32 nvarchar(max), Col33 nvarchar(max), Col34 nvarchar(max), Col35 nvarchar(max), Col36 nvarchar(max)
        )qse
  

Как я могу улучшить скорость OPENJSON для быстрого анализа 3 млн строк?

Ваша помощь и предложения будут оценены.

Комментарии:

1. Вы проверили эффект индексации данных JSON ?

2. Да, все еще занимает столько же времени. Но производительность улучшилась за счет назначения вместо этого правильных типов данных (nvarchar (max)) в предложении WITH

Ответ №1:

Все ли ваши столбцы содержат больше JSON? Потому что столбцы строк, которые не содержат больше JSON, должны быть (максимальной длины) NVARCHAR (4000). Если поле содержит число, то оно должно указывать числовой тип данных SQL (при необходимости), а не NVARCHAR (МАКСИМУМ). Это должно уменьшить распределение и ускорить его.

Комментарии:

1. Да, я пытался назначить тип данных на основе данных. И, да, производительность улучшилась. Спасибо