为什么取最后一页速度会快呢?
select 语句
SELECT TOP 6 *  FROM (
SELECT TOP 6 * FROM (SELECT TOP 
6 * FROM (SELECT TOP 23706 * FROM Sign_StudentInfo ORDER BY  ID ) DERIVEDTBL ORDER BY  ID DESC ) DERIVEDTBL ORDER BY  ID ) DERIVEDTBL 

解决方案 »

  1.   

    在sql版发现的好东东,存储过程分页:
    CREATE   procedure p_splitpage   
    @sql nvarchar(4000), --要执行的sql语句
    @currentpage int=2,  --要显示的页码
    @pagesize int=10, --每页的大小
    @pagecount int=0 out --总页数
    as
    set nocount on
    declare @p1 intexec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output
    --select @pagecount
    select @pagecount=ceiling(1.0*@pagecount/@pagesize)
    ,@currentpage=(@currentpage-1)*@pagesize+1exec sp_cursorfetch @p1,16,@currentpage,@pagesize 
    exec sp_cursorclose @p1
    GO使用:p_splitpage 'SELECT * FROM Sign_StudentInfo ORDER BY  ID ',1100,6
    我测试过了.取数据一般不会超过2秒
      

  2.   

    ajex(仙桃人) 摘自SQL版的方法,应该是没有问题的了.
      

  3.   

    和数据库数据检索遍历有关
    肯定是越往后越慢了要提高检索速度
    要么分表
    要么先全部提出来1、放到DataSet中,程序控制翻页
                     2、绑定到DataGrid中,翻页你做的是分页控件,看着权宜吧
      

  4.   

    给你个例子,我们这里都这么写,查询几十万条的记录也只很快
    CREATE PROCEDURE PO_View_RpoMaster
    ,@Status varchar(50)
    ,@PoGroupID varchar(50)
    ,@RpoComID varchar(50)
    ,@RpoType varchar(50)
    ,@PAddr varchar(50)
    ,@ReqID varchar(50)
    ,@ReqUserName nvarchar(50)
    ,@MtlID varchar(50)
    ,@MtlName nvarchar(200)
    ,@pagecount int
    ,@pageindex int
    ,@orderbystr  varchar(50)
    AS
    set nocount on
    declare @Start  int ,@End  int,@Total int
    set  @Start=(@pageindex-1)*@pagecount+1
    set  @End=@Start+@pagecount-1
    create table #temp      (   
    Sid int  identity,
                            RpoNo varchar(50),
    OpenDate datetime,
    ReqUserName nvarchar(50),
    DeptName nvarchar(50),
    RpoTypeName nvarchar(200),
    Status varchar(50),
    Enable varchar(50),
    ConfirmDate datetime,
    ConfirmUser varchar(50)
                         )
    if @orderbystr like 'RpoNo%'
    begin
    set @orderbystr='A.'+@orderbystr
    end
    insert #temp exec  ('select distinct A.RpoNo,OpenDate,ReqUserName,DeptName,RpoTypeName,Status,Enable,ConfirmDate,ConfirmUser
                            from  RpoMaster A,RpoDetail B where  A.RpoNo=B.RpoNo and  A.ReqUserName like ''%'+@ReqUserName+'%'' and B.MtlNo like ''%'+@MtlID+'%'' and B.MtlName like ''%' + @MtlName +'%'' and GroupID  like ''%'+@PoGroupID+'%'' and A.RpoNo like  ''%'+@RpoNo+'%'' and  Status like ''%'+@Status+'%''   and PAddr like ''%'+@PAddr+'%'' and DeptID like ''%'+@ReqID+'%'' and ComID='''+@RpoComID+'''   order by ' +@orderbystr)
    set @Total=@@Rowcount
    select  total=@Total ,Sid, RpoNo,OpenDate,ReqUserName,DeptName,RpoTypeName,Status,Enable,ConfirmDate,ConfirmUser into #tempT from #temp where Sid between @Start and @End
    select  *  from #tempT
    drop table #temp
    drop table #tempT
    GO
      

  5.   

    能不能先添加到dataset中,然后再对dataset中的数据进行分组显示
      

  6.   

    这个问题确实很棘手,你可以采用存储过程提高一点效率,跟数据库有关,从你的代码中看出你用的好像是SQL Server,Oracle数据库中存在rownum可以用,有的数据库添加了关键字,
    [limit] startRow [offset] rowCount,对分页处理很方便。