У меня есть запрос, как этотХотите результаты в том же порядке, что и вход
SELECT NUM,
col1,
col2,
col3,
col4,
col5,
col6
FROM (SELECT NUM,
col1,
col2
FROM (SELECT a.mid AS NUM,
a.col1 AS col1,
a.col2 AS col2
FROM tbl a (nolock)
WHERE a.mid IN ('09-404811,10-433495,10-433575,10-423789')) AS MainQuery
UNPIVOT (LabelValue
FOR Label IN (NUM,
col1,
col2)) AS UnpvtQuery) LT
INNER JOIN #SetItemsTable tt
ON tt.col7 = LT.col1
WHERE LT.NUM IN ('09-404811,10-433495,10-433575,10-423789')
ORDER BY Charindex(NUM, '09-404811,10-433495,10-433575,10-423789')
это лишь представление исходного запроса. Список значений, предоставленных для IN(), будет приблизительно 400+.
Проблема, которая у меня есть с этим вопросом: ORDER BY CHARINDEX(NUM,'09-404811,10-433495,10-433575,10-423789')
занимает почти 25 секунд для выполнения. В противном случае остальная часть запроса занимает всего 6 секунд. Я использую CHARINDEX()
, потому что мне нужен результат в том же порядке, в котором отображаются значения внутри IN().
Как я могу эффективно выполнять эту работу.
Самый простой способ сделать это - использовать эффективную функцию разделения. Будет ли это значительно быстрее, чем ваш текущий подход еще предстоит выяснить ... –
'LT.NUM IN ('09 -404811,10-433495,10-433575,10-423789 ')' не будет делать то, что вы хотите так или иначе. Это опечатка? Должно быть «LT.NUM IN ('09 -404811», «10-433495», «10-433575», «10-423789») '. –
@ Мартин, вы правы. Это опечатка. На самом деле я использую функцию разделения, которая принимает только один список, разделенный запятыми, вместо отдельных строк. – BumbleBee