Встраивание значений здесь выполнено таким образом что нет
вероятности атаки SQL-инъекцией. Изменение использования JSON, описанное
ниже, касается производительности и не имеет ничего общего с безопасностью.
К сожалению, производительность OPENJSON на нашем экземпляре SQL Server 2017 года.
Приведенный ниже запрос, созданный EF Core 8, выполняется 1,8 секунды и дает почти 400 000 читает:
Код: Выделить всё
DECLARE @__scheduleTagIds_0 nvarchar(4000) = N'[5835,5970,6563,6564,6565,6645,6835,6850,7034,7127]';
SELECT [s].[ScheduleTagId]
,[s].[MustStartProdBy]
FROM [ScheduleTagMustStartBy] AS [s]
WHERE [s].[ScheduleTagId] IN (
SELECT [s0].[value]
FROM OPENJSON(@__scheduleTagIds_0) WITH ([value] int '$') AS [s0]
)
Код: Выделить всё
SELECT [s].[ScheduleTagId]
,[s].[MustStartProdBy]
FROM [ScheduleTagMustStartBy] AS [s]
WHERE [s].[ScheduleTagId] IN (5835,5970,6563,6564,6565,6645,6835,6850,7034,7127)
Вопрос
Что я могу сделать, чтобы устранить эту проблему? Я открыт для вариантов как в EF, так и на стороне SQL Server (хотя я не хочу менять уровень совместимости базы данных).
Подробнее здесь: https://stackoverflow.com/questions/777 ... n-openjson
Мобильная версия