我有一个这样的查询
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() 中的值出现的顺序相同的结果。
我怎样才能有效地做到这一点。
我会先选择对临时表的内部查询,然后您可以根据需要进行查询和排序/分组。我会避免尝试使用 Charindex,因为它需要遍历返回的所有值。