Das Inlining von Werten erfolgt hier auf diese Weise dass keine Gefahr eines SQL-Injection-Angriffs besteht. Bei der unten beschriebenen Änderung zur Verwendung von JSON geht es ausschließlich um Leistung und nicht um Sicherheit.
Leider ist die Leistung von OPENJSON auf unserer 2017 SQL Server-Instanz ist schlecht.
Die Ausführung der folgenden Abfrage, die von EF Core 8 generiert wird, dauert 1,8 Sekunden und ergibt fast 400.000 lautet:
Code: Select all
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]
)
Code: Select all
SELECT [s].[ScheduleTagId]
,[s].[MustStartProdBy]
FROM [ScheduleTagMustStartBy] AS [s]
WHERE [s].[ScheduleTagId] IN (5835,5970,6563,6564,6565,6645,6835,6850,7034,7127)
Frage
Was kann ich tun, um dieses Problem zu beheben? Ich bin offen für Optionen entweder in EF oder auf der SQL Server-Seite (möchte jedoch den Kompatibilitätsgrad der Datenbank nicht ändern).