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