sqlserver临时表性能有关问题

sqlserver临时表性能问题
分页存储过程是这样写的

DECLARE @SumCount int
SELECT Identifier,Title,Content 
INTO #temp_SiteInfo 
FROM SiteInfo 
WHERE 
(@Identifier IS NULL OR Identifier=@Identifier)AND
(@Title IS NULL OR Title=@Title)AND
(@Content IS NULL OR Content Like @Content) 

SET @SumCount=@@RowCount

DECLARE @TotalPage int
IF(@SumCount%@PageSize=0)
BEGIN
SET @TotalPage=@SumCount/@PageSize
END
ELSE
BEGIN
SET @TotalPage=Round(@SumCount/@PageSize,0)+1
END
SELECT TOP (@PageSize) Identifier,Title,Content,@TotalPage as totalPage,@SumCount as SumCount FROM #temp_SiteInfo WHERE 
Identifier NOT IN (SELECT Top (@PageSize*(@CurrentPage-1))Identifier FROM #temp_SiteInfo)

先从表里取出数据到临时表然后计算总条数最后取出当前页数据,这样有没有性能问题 我担心第一步影响速度,本来只需要一页的数据却取出所有的数据,但是将记录插入到临时表中,是否和不插入到临时表的查询语句机制不同.也就是临时表是在下面查找当前页数据用到它时才去填充数据,还是在into 临时表时已经填充了数据
------解决方案--------------------
在into 临时表时已经填充了数据 --- 是这个。
另外,我给你一个分页的存储过程吧。你那个个人觉得效率不高。

/*
* Remark:分页
* */
create PROCEDURE [dbo].[USP_PAGE_SPLIT_V1]    
    @sqlstr VARCHAR(8000) ,    
    @currentpage INT , --第N页          
    @pagesize INT --每页行数      
AS     
    BEGIN          
     
        DECLARE @sortStr NVARCHAR(1000)= ' ORDER BY RAND() '    
        IF ( CHARINDEX(' ORDER ', @sqlstr) > 0 )     
            BEGIN    
                SET @sortStr = SUBSTRING(@sqlstr,    
                                         CHARINDEX(' ORDER ', @sqlstr),    
                                         LEN(@sqlstr) - CHARINDEX(' ORDER ',    
                                                              @sqlstr) + 1)    
                SET @sqlstr = REPLACE(@sqlstr, @sortStr, ' ')    
            END       
      
        DECLARE @sqlCount NVARCHAR(MAX)     
        SET @sqlCount = 'SELECT COUNT(0) AS RecordCount FROM(' + @sqlstr    
            + ') AS TempTable' ;     
        EXEC sp_executesql @sqlCount    
        
      
        DECLARE @startIndex INT ,    
            @endIndex INT    
        SET @startIndex = ( @currentpage - 1 ) * @pagesize + 1    
        SET @endIndex = @pagesize * @currentpage    
        SET @sqlCount = 'SELECT * FROM (SELECT ROW_NUMBER() OVER(' + @sortStr    
            + ') AS RowNumber,* FROM (' + @sqlstr    
            + ') AS TempTable) AS TempOrderTable WHERE RowNumber BETWEEN '    
            + CAST(@startIndex AS VARCHAR) + ' AND '    
            + CAST(@endIndex AS VARCHAR)