我有这样的查询
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()里面的值出现的顺序相同。
如何有效地完成这项工作。
答案 0 :(得分:1)
我会首先选择内部查询到临时表,然后您可以根据需要查询和排序/分组。我会避免尝试使用Charindex,因为它需要经历所有返回的值。