我的查询采用以下形式:
SELECT [Col1], [Col2], ..., [ColX]
FROM ( *** VERY LARGE QUERY WITH LOTS OF JOINS ***) [Src]
现在,这个查询几乎完全返回了25行,但是如果我最后添加了ORDER BY,那么它会挂起:
SELECT [Col1], [Col2], ..., [ColX]
FROM ( *** VERY LARGE QUERY WITH LOTS OF JOINS ***) [Src]
ORDER BY [Col1], [Col2], [Col3], [Col4]
如果我这样做也会发生:
SELECT * FROM (
SELECT [Col1], [Col2], ..., [ColX]
FROM ( *** VERY LARGE QUERY WITH LOTS OF JOINS ***) [Src]) [Src]
ORDER BY [Col1], [Col2], [Col3], [Col4]
但是如果我真的那么查询就会执行:
SELECT * INTO #TempTable FROM (
SELECT [Col1], [Col2], ..., [ColX]
FROM ( *** VERY LARGE QUERY WITH LOTS OF JOINS ***) [Src]) [Src]
SELECT * FROM #TempTable
ORDER BY [Col1], [Col2], [Col3], [Col4]
我检查了执行计划,它显然试图在查询深处的一个源表上进行索引查找和密钥查找。由于ORDER BY只应关注那25行,我很难过为什么它甚至会关注父表的索引。有什么想法吗?