Ash*_*han 1 sql-server sql-server-2008-r2
在我的代码中,我使用select * into #tempTable
. 临时表包含大量记录,我需要在代码中多次从中检索数据,因此我在其上创建了聚集索引。但不知何故,我没有按照创建的索引以正确的顺序获取数据。
我知道我可以简单地通过放置order by
子句来做到这一点,但我的问题是为什么即使我强制优化器使用特定索引,我也没有以正确的顺序获取数据?
下面是我的示例代码:
----------- Sample code ----------------------------
;with CTE1
as (
select col1
,col2
,-- - -- - - from table1
union
select col1
,col2
,-- - -- - - from table2
-- few more tables in union --
)
, CTE2
as (
select *
,RowNumber = RowNumber()
over (order by case
when @sortOrder = 0
then case
when @sortColumn = 'Date'
then [tdate]......some more dynamic order by conditions..........
end
end asc
)
from CTE1
inner join
from TABLE3 on -- some conditions
)
select *
from CTE2
into #TempTable;
Run Code Online (Sandbox Code Playgroud)
然后添加聚集索引:
create clustered index IX_TempTable_RowNumber on #TempTable (RowNumber asc);
select *
from #TempTable with (index (IX_TempTable_RowNumber));
----------------- End of sample code ---------------------
Run Code Online (Sandbox Code Playgroud)
即使我检查了表方案和索引详细信息
exec tempdb.dbo.sp_help N'#TempTable';
select *
from tempdb.sys.indexes
where name = N'IX_TempTable_RowNumber'
Run Code Online (Sandbox Code Playgroud)
对我来说似乎是正确的。我在这里缺少什么?