当前位置: 代码迷 >> Sql Server >> SqlServer大量读取数据解决思路
  详细解决方案

SqlServer大量读取数据解决思路

热度:61   发布时间:2016-04-24 10:14:07.0
SqlServer大量读取数据
请问一下,怎么样能够快速的读取大量数据。
假如说一次性读取一百万条,怎么才能快速的读出来。
数据库:SqlServer
技术:ADO.NET
注:数据不是给客户端用的,所以不考虑分页,自己读出来另有作用。大家有什么快速的解决方法吗?

------解决方案--------------------
多快才算快?
------解决方案--------------------
不分页不会快到哪里去的。看你的总数量是多少?
------解决方案--------------------
单纯从SQL Server来说,返回100万,几分钟到十几分钟不等。这个过程视乎forwarded/forwarding record、page split、fragment等等,如果全表返回,只要内存足够,没有阻塞,你基本上没有什么优化空间了,如果是有where条件返回,还要看结果集和总量的比例,比例太大的话也没什么优化空间。简单来说,在SQL Server端返回百万级数据,可提升空间不大。

而你说的DataSet ,这个是前端范畴,可能瓶颈在网络传输、数据绑定、转换、提取方式等等上面,这部分暂时没有什么研究。
------解决方案--------------------
数据不是给客户端用的,自己读出来另有作用你是不是只要导出来?
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT * from [A] " queryout D:\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL

导出csv文件,用excel 也可以打开处理
------解决方案--------------------
我目前用C#写的考勤系统,将全公司一个月的打卡数据一次导出到Excel表,用的是NOPI插件,速度很快
建议楼主试下看


sSQL = @"dbo.spAtt_Month ";

            if (bFlag) //可查全部人的
            {
                sSQL += "'',";
            }
            else //只能查自己的
            {
                sSQL += "'" + Utility.RQuote(this.UserID) + "',";
            }
            sSQL += Utility.Quote(this.ddlATT_MONTH.SelectedValue);
            
            DataTable dt = db.ExecDataTable(sSQL);

            if (dt.Rows.Count > 0)
            {
                string sFileUpload2 = "考勤月统计表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";

                CommonFunction.ExcelHelper.ExportDTtoExcel(dt, "考勤月统计表", Server.MapPath("~/UploadFiles/Del/") + sFileUpload2);
                HLResult.NavigateUrl = "~/UploadFiles/Del/" + sFileUpload2;
                HLResult.Visible = true;

                ScriptManager.RegisterStartupScript(UpdatePanel2, typeof(UpdatePanel), "scriptName", "alert('考勤月统计表导出成功!请点击右边链接下载。')", true);
                return;
            }
            else
            {
                ScriptManager.RegisterStartupScript(UpdatePanel2, typeof(UpdatePanel), "scriptName", "alert('对不起,没有记录要导出。')", true);
                return;
            }
  相关解决方案