Может кто-то помочь мне оптимизировать этот запрос. Я написал только 2 из аргументов case, но на самом деле у них примерно 30 таких случаев, все вложенные, как показано в этом примере (с 2) ниже.TSQL Оптимизация для множественного вложенного запроса case
SELECT *
FROM QS
INNER JOIN R ON (CASE
WHEN R.FieldCode = 'L'
THEN ---
CASE
when (
(R.Match = 1 AND QS.lineid
IN (SELECT CONVERT(int,s) FROM SplitFunc(',', R.FieldValue)))
OR (R.Match = 0 AND QS.lineid NOT IN (SELECT CONVERT(int,s) FROM SplitFunc(',', R.FieldValue)))) then 1
ELSE 0
END
----
WHEN R.FieldCode = 'D'
THEN
CASE
when ((R.Match = 1 AND QS.productid
IN (SELECT CONVERT(int,s) FROM SplitFunc(',', R.FieldValue)))
OR (R.Match = 0 AND QS.productid NOT IN (SELECT CONVERT(int,s) FROM SplitFunc(',', R.FieldValue)))) then 1
ELSE 0
END
END)=1
Что является «неправильным» с запросом, который необходимо оптимизировать (низкая производительность, или просто утомительная и чрезвычайно длинная)? Возможно, лучше написать скалярную функцию, которая принимает FieldCode, Match, ProductId, FieldValue и т. Д., Поэтому логически логически логически логически входить в сумасшедший запрос (и его можно повторно использовать). –
ЭТО СУПЕР МЕДЛЕННО КАК ISA – DinaDee