"读的次数多了速度就会慢下来"是什么意思?
应该是读完一段后,从内存释放,再读下一段吧!

解决方案 »

  1.   

    读取一张表,数据几十万条,如果一次读取处理不现实,就要连续的分批读取,可读的次数多了速度就会慢下来.怎么样能快速的把这样的表读完?
    ========如是前台调用,请使用分页存储过程.
      

  2.   

    好象有个网站有篇文章是讲海量数据读取的,不过好象要几块钱下载吧,收费资料,你可以去看看
      

  3.   

    谢谢各位,分页读的话,怎写快一些?
      

  4.   

    CREATE PROCEDURE P_Pagination
    @tblName   varchar(50),        -- 表名,必填
    @rtFields varchar(500) = '*',   -- 需要返回的列, 默认返回所有列,强烈要求该处写明需要返回的列名
    @fldName varchar(255)='',       -- 排序的字段名,必填
    @PageSize   int = 20,           -- 页尺寸
    @PageIndex  int = 1,            -- 页码
    @doCount  bit = 0,    -- 返回记录总数, 0:不返回;1:返回;默认:0
    @OrderType bit = 0,   -- 设置排序类型, 0:升序;1:降序;默认:0
    @strWhere  varchar(1500) = ''   -- 查询条件 (注意: 不要加 where)
    AS
    declare @strSQL   varchar(2000)        -- 主SQL语句
    declare @strTmp   varchar(20)         -- 临时变量
    declare @strOrder varchar(100)         -- 排序if @tblName=''
    begin
    RAISERROR('表名必填!',16,1)
    return
    endif @doCount != 0 --如果@doCount传递过来的不是0,就执行总数统计。
    begin
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
    if @strWhere !=''
    set @strSQL = @strSQL + ' where '+@strWhere 
    end  
    else --返回查询结果集
    begin
    if @fldName=''
    begin
    RAISERROR('排序列名称必填!',16,1)
    return
    end
    if @PageIndex<=0 or @PageSize<=0
    begin
    RAISERROR('数据格式不正确!',16,1)
    return
    end
    set @strSQL = 'select top ' + str(@PageSize) +' '+@rtFields+ '  from ['+ @tblName + '] where 1=1 '
    if @strWhere != ''   
    set @strSQL = @strSQL + ' and ' + @strWhere + ' ' if @OrderType != 0 --降序
    begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName +'] desc'
    end
    else --升序
    begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
    end if @PageIndex = 1 --如果是第一页执行以下代码,这样会加快执行速度
    begin
    set @strSQL = @strSQL + @strOrder 
    end
    else
    begin
    set @strSQL = @strSQL + ' and [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
    end 
    end   
    exec (@strSQL)
    GO