my天涯吧 关注:28贴子:1,424
  • 3回复贴,共1

关于ado分页的问题

只看楼主收藏回复

1.分页方案一:(利用Not In和SELECT TOP分页)
     语句形式:
SELECTTOP10*
FROMTestTable
WHERE(IDNOTIN
           (SELECTTOP20id
         FROMTestTable
         ORDERBYid))
ORDERBYID
SELECTTOP页大小*
FROMTestTable
WHERE(IDNOTIN
           (SELECTTOP页大小*页数id
         FROM表
         ORDERBYid))
ORDERBYID
     2.分页方案二:(利用ID大于多少和SELECT TOP分页)
     语句形式:
    SELECTTOP10*
FROMTestTable
WHERE(ID>
           (SELECTMAX(id)
         FROM(SELECTTOP20id
                 FROMTestTable
                 ORDERBYid)AST))
ORDERBYID
SELECTTOP页大小*
FROMTestTable
WHERE(ID>
           (SELECTMAX(id)
         FROM(SELECTTOP页大小*页数id
                 FROM表
                 ORDERBYid)AST))
ORDERBYID
     3.分页方案三:(利用SQL的游标存储过程分页)
create   procedureSqlPager
@sqlstrnvarchar(4000),--查询字符串
@currentpageint,--第N页
@pagesizeint--每页行数
as
setnocounton
declare@P1int,--P1是游标的id
@rowcountint
execsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcountoutput
selectceiling(1.0*@rowcount/@pagesize)as总页数--,@rowcountas总行数,@currentpageas当前页
set@currentpage=(@currentpage-1)*@pagesize+1
execsp_cursorfetch@P1,16,@currentpage,@pagesize
execsp_cursorclose@P1
setnocountoff
     其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
     建议优化的时候,加上主键和索引,查询效率会提高。
     通过SQL 查询分析器,显示比较:我的结论是:
     分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
     分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
     分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
方案一不用说了,1万条就完蛋,方案二应该是最好的,但是到N层架构不会定,不知道您老人家能不能给封装个



1楼2011-06-23 12:55回复
    一般用方案3啊


    2楼2011-06-23 13:05
    回复
      你把第二封装下么


      3楼2011-06-24 13:31
      回复
        没空哈


        4楼2011-06-24 16:34
        回复