我现在是用web程序查询数据库,因为有可能要查3个月这么长时间的记录,不知道会不会因为数据量过大,导致客户浏览的时候浏览器假死大家都是有经验的吧,给点建议,我要查询一个表中的大量数据,而且是一次提取,用什么方法比较好!~

解决方案 »

  1.   

    分页读取。这么大的数据量不读取谁受得了啊  用分页的话就不存在web部分数据量过大的问题了,剩下的就是数据库优化的问题了,用存储过程、建索引、只返回相关字段
      

  2.   


    一般是通过分页的办法处理如果查询不慢的话,可以不使用分页存储过程,直接设置GridView分页,这样最简单。
      

  3.   

    分页啦。楼主。
    增加个导出按钮。给客户导出excel就行了。
      

  4.   


    同意~导出excel速度还是可以接受的
      

  5.   

    数据过大的话,肯定会死,WEB的弊端无法避免,即使考虑分页,如果查询本身需要综合分析计算的话,比如需要一个Group BY之类的统计的话,查询本身就很耗时,客户端等待一定时间就会显示超时无响应了。所以压缩数据,尽量让数据量减少才行,关键时候使用数据定期提纯的方法,缓存提纯数据到临时表用来查询。
      

  6.   

    当然要分页啦~~~ fill 方法加个参数就行了~~~~ 
    datagrid向导里也可以设置每页多少行
      

  7.   

    如果一次提取,并且一次显示,不要用gridview,自己拼成HTML TABLE串返给客户端,速度会提高几百倍,1。1框架我试过,
    GRIDVIEW弄1W条记录要几分钟,自己拼出来只要10几秒甚至更少
      

  8.   

    分页会好很多送个存储过程给你
    create PROCEDURE pagelist 
    @tablename nvarchar(50),
    @fieldname nvarchar(50)='*',
    @pagesize int,--每页显示记录条数
    @currentpage int,--第几页
    @orderid nvarchar(50),--主键排序
    @sort int,--排序方式,1表示升序,0表示降序排列
    @rowcount int output,--总记录数,共有几条信息
    @pagecount int output--总页数,共有多少页
    AS
    declare @countsql nvarchar(50)
    declare @sql nvarchar(200)
    declare @subsql nvarchar(100)--not in子sql语句
    declare @tmpOrderid nvarchar(50) 
    --返回总记录数,并赋值给输出参数@rowcount
    set @countsql='select @totalcount=count(*) from '+@tablename
    exec sp_executesql @countsql,N'@totalcount int out',@rowcount output--判断字段名是否为空
    if @fieldname is null or @fieldname=''
    set @fieldname=' * '--判断是否排序及排序方式
    if @orderid is null or @orderid=''
    set @tmpOrderid=' '
    else
    begin 
    if @sort=0
    set @tmpOrderid='order by '+@orderid+' desc'
    else
    set @tmpOrderid='order by '+@orderid+' asc'
    end--计算页数
    if @rowcount%@pagesize>0
    set @pagecount =(@rowcount/@pagesize)+1;
    else
    set @pagecount=@rowcount/@pagesize;--分页算法实现
    set @subsql='select top'+str(@pagesize*(@currentpage-1))+' '+@orderid+' from '+@tablename+' '+@tmpOrderid
    set @sql='select top'+str(@pagesize)+' '+@fieldname+' from '+@tablename+' where '+@orderid+' not in ('+@subsql+')'+@tmpOrderid
    exec(@sql)
    ===========================================================
    .cs文件:
    protected void Page_Load(object sender, EventArgs e)
        {
            int CurrentPage,RowCount,PageCount;
            int PageSize = 2;
            if (Request["CurrentPage"] == null||Convert.ToInt32(Request["CurrentPage"])< 1)
            {
                CurrentPage=1;
            }
            else
            {
                CurrentPage=Convert.ToInt32(Request["CurrentPage"]);
            }        //数据库操作
            SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
            SqlCommand cmd = new SqlCommand("pagelist", sqlconn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = sqlconn;
            SqlParameter[] prams ={
                                   new SqlParameter("@tablename",SqlDbType.NVarChar,50),
                                   new SqlParameter("@fieldname",SqlDbType.NVarChar,50),
                                   new SqlParameter("@pagesize",SqlDbType.Int),
                                   new SqlParameter("@currentpage",SqlDbType.Int),
                                   new SqlParameter("@orderid",SqlDbType.NVarChar,50),
                                   new SqlParameter("@sort",SqlDbType.Int),
                                   new SqlParameter("@rowcount",SqlDbType.Int),
                                   new SqlParameter("@pagecount",SqlDbType.Int)};
            prams[0].Value = "news";//表名
            prams[1].Value ="*";//字段名
            prams[2].Value =PageSize;//每页显示条数
            prams[3].Value =CurrentPage;//当前页数
            prams[4].Value ="id";//主键
            prams[5].Value =1;//排序方式,0表示降序,1表示升序
            prams[6].Direction = ParameterDirection.Output;//总记录数
            prams[7].Direction = ParameterDirection.Output;//总页数
            foreach(SqlParameter pram in prams)
            {
                cmd.Parameters.Add(pram);
            }
            sqlconn.Open();
            SqlDataAdapter sda = new SqlDataAdapter();
            DataSet ds = new DataSet();
            sda.SelectCommand = cmd;
            sqlconn.Close();
            sda.Fill(ds);
            //数据库操作结束        RowCount = (int)cmd.Parameters["@rowcount"].Value;
            PageCount =(int)cmd.Parameters["@pagecount"].Value;
            
            if (CurrentPage>PageCount)
            {
                Response.Redirect("CutPage.aspx?CurrentPage="+Convert.ToString(PageCount));
                Response.End();
            }
            this.lblCurrent.Text = Convert.ToString(CurrentPage);
            this.lblPageTotal.Text = Convert.ToString(PageCount);
            this.lblRowsTotal.Text = Convert.ToString(RowCount);
            this.lblPageSize.Text = Convert.ToString(PageSize);        this.hlFirst.NavigateUrl = "CutPage.aspx?CurrentPage=1";
            this.hlPrev.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage-1);
            this.hlNext.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(CurrentPage+1);
            this.hlLast.NavigateUrl = "CutPage.aspx?CurrentPage=" + Convert.ToString(PageCount);
            if (Convert.ToInt32(CurrentPage) == 1)
            {
                this.hlPrev.Enabled = false;
                this.hlFirst.Enabled = false;
            }
            if (Convert.ToInt32(CurrentPage) == PageCount)
            {
                this.hlNext.Enabled = false;
                this.hlLast.Enabled = false;
            }        GridView1.DataSource = ds.Tables[0];
            GridView1.DataBind();
        }