如何优化该分页

lgjlry 2005-10-08 02:58:12
---该分页非常不稳定,服务器总是死机, 一百万记录 1G内存 CPU 2.66
---有时能够打开,有时就死了
ALTER proc showpage

(@tblName varchar(255)='T_Category', -- 表名
@strGetFields varchar(1000)='*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int=10, -- 页尺寸

@PageIndex int=1, -- 页码

@doCount bit=1, -- 返回记录总数, 非 0 值则返回

@orderType bit=0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500)='' -- 查询条件 (注意: 不要加 where)

)

AS

declare @strSQL varchar(5000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型
-----------------------------------------------------
declare @s_pagesize varchar(20) --页码的记录
declare @s_pageindex varchar(20) --页码
-------------------------------------------------------
select @s_pagesize=cast(@PageSize as varchar(20)), ---转换为字符
@s_pageindex=cast((@PageIndex-1)*@PageSize as varchar(20)) ---转换

if @doCount != 0

begin

if @strWhere !=''

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere+''

else

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin



if @orderType != 0

begin

set @strTmp = '<(select min'

set @strOrder = ' order by [' + @fldName +'] desc'

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = '>(select max'

set @strOrder = ' order by [' + @fldName +'] asc'

end



if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = 'select top ' + @s_PageSize +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder

else

set @strSQL = 'select top ' + @s_PageSize +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = 'select top ' + @s_pagesize +' '+@strGetFields+ ' from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + @s_pageindex + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder



if @strWhere != ''

set @strSQL = 'select top ' + @s_pagesize +' '+@strGetFields+ ' from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

+ @fldName + ']) from (select top ' + @s_pageindex + ' ['

+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end

exec (@strSQL)
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
swordmanli 2006-01-02
  • 打赏
  • 举报
回复
http://www.blog.com.cn/user25/lijunyi/archives/2005/213533.shtml
张海霖 2005-10-12
  • 打赏
  • 举报
回复
ding
zouqiang122 2005-10-08
  • 打赏
  • 举报
回复
支持一下!!!

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧