SqlServer大量读取数据

落雅秋齐 2014-07-24 08:17:09
请问一下,怎么样能够快速的读取大量数据。
假如说一次性读取一百万条,怎么才能快速的读出来。
数据库:SqlServer
技术:ADO.NET
注:数据不是给客户端用的,所以不考虑分页,自己读出来另有作用。大家有什么快速的解决方法吗?
...全文
612 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
霜寒月冷 2014-07-25
  • 打赏
  • 举报
回复
不加的会默认在master 库找那张表
霜寒月冷 2014-07-25
  • 打赏
  • 举报
回复
那就执行上面语句 截得 SELECT * from [A] [A]前面要加上你的数据库名称 如 数据库名为DB 那就 select * from DB.dbo.[A] ,导出完成之后就在d盘有csv文件的
落雅秋齐 2014-07-25
  • 打赏
  • 举报
回复
引用 5 楼 chz415767975 的回复:
数据不是给客户端用的,自己读出来另有作用你是不是只要导出来?
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 也可以打开处理
就是导出来,然后还是要继续操作导出来的数据,现在的数据大概 有 五千万条。
霜寒月冷 2014-07-25
  • 打赏
  • 举报
回复
数据不是给客户端用的,自己读出来另有作用你是不是只要导出来?
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 也可以打开处理
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
单纯从SQL Server来说,返回100万,几分钟到十几分钟不等。这个过程视乎forwarded/forwarding record、page split、fragment等等,如果全表返回,只要内存足够,没有阻塞,你基本上没有什么优化空间了,如果是有where条件返回,还要看结果集和总量的比例,比例太大的话也没什么优化空间。简单来说,在SQL Server端返回百万级数据,可提升空间不大。 而你说的DataSet ,这个是前端范畴,可能瓶颈在网络传输、数据绑定、转换、提取方式等等上面,这部分暂时没有什么研究。
---涛声依旧--- 2014-07-25
  • 打赏
  • 举报
回复
我是用的存储过程来查询数据的,然后将DataTable 绑定到GridView的数据源,部分代码如下:

DataTable dt = db.ExecDataTable(sSQL);
            gvResult.DataSource = dt;
            gvResult.DataBind();
---涛声依旧--- 2014-07-25
  • 打赏
  • 举报
回复
我目前用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;
            }
唐诗三百首 2014-07-25
  • 打赏
  • 举报
回复
建议数据库用文件组(即多文件)的结构,各文件最好分布在不同的磁盘阵列上, 这样读取时可以并发多线程同时读取,提高效率.
--小F-- 2014-07-24
  • 打赏
  • 举报
回复
不分页不会快到哪里去的。看你的总数量是多少?
落雅秋齐 2014-07-24
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
多快才算快?
快速,只是相对来说,我现在用DataSet读取数据,读80万 数据读出来大概需要差不多一个多小时吧。现在就是想知道有没有更快的方法。
發糞塗牆 2014-07-24
  • 打赏
  • 举报
回复
多快才算快?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧