大数据量的查询程序应该怎么设计

ailin84 2010-07-14 02:36:25
昨天朋友问了我一个问题,

就是统计乡村基的销售数据,要统计各分店的销售情况,比如顾客量啊 销售金额啊 热销产品啊什么的

但是数据库很大,大概有40G左右,光销售单就有2000多万条记录,数据是sql 2000

朋友使用了一个for循环,对每一个分店单独统计再来汇总,但是基本每一次查询都要执行好几十秒,还是在查询分析器里

朋友就怕做出来的程序会超时,我们接触的数据库一般顶多10个G,太大了真没把握,sql支持这么多数据量么?

我就想问问 像这样大数据量的查询,应该这样来设计,

主要是两个方面的问题:

1.windows程序本身怎样设计
2.数据查询方面怎么优化

前提是不能去改数据库的结构了,只能读,但是可以在服务器的那台机器上装一个小程序啊服务之类的,作为辅组办法



...全文
407 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
ailin84 2011-10-15
  • 打赏
  • 举报
回复
回个帖,其实还有个很笨的技术,真的性能能提升很大

实际例子:一张5000万数据的表,以前查询统计至少5 6秒,现在都是1秒左右

数据冗余:
大数据量的查询,浪费磁盘空间做冗余是值得的,联表查询性能不如数据冗余,不过要考虑数据修改的时候做级联修改,或者程序控制

冗余统计表:
先把最小单位的数据统计做出来,单独存表,查的时候是,再合并统计结果

zhan781443156 2010-07-15
  • 打赏
  • 举报
回复
这么大的数据没遇到过,帮顶……
hongmaohouzi 2010-07-15
  • 打赏
  • 举报
回复
建立索引,使用存储过程,优化查询语句。
MADfox1983 2010-07-15
  • 打赏
  • 举报
回复
mark
xiayunhai1000 2010-07-15
  • 打赏
  • 举报
回复
关注。。。。。。
AsYouLikeIt 2010-07-15
  • 打赏
  • 举报
回复
页面缓存
g505149841 2010-07-15
  • 打赏
  • 举报
回复
把需要的数据建个检视表,让数据库自己定时跑,然后在程序里直接查询检视表。。。
xrongzhen 2010-07-15
  • 打赏
  • 举报
回复
程序中,避免频繁读取,适当使用本地缓存


添加索引

分段处理,不要每次全查出来。
段传涛 2010-07-14
  • 打赏
  • 举报
回复
这个问题值得研究, 帮顶 明天来学习
wym12315 2010-07-14
  • 打赏
  • 举报
回复
刚刚完成了一个大数据量的计算统计,设计到很多算法、循环、权重等头痛的问题,除了优化数据库、索引等等,我用了SQL的作业处理,定时(如每天晚上11点)计算,将计算的结果汇总到一个单独的数据表中,这样就可以直接读取数据使用了。
letyougo 2010-07-14
  • 打赏
  • 举报
回复
分步查询吧
Delphiandliu 2010-07-14
  • 打赏
  • 举报
回复
根据统计的格式创建一个汇总表,然后通过一个小程序把数据按业务规则汇总,填写到汇总表中,然后界面显示的时候用汇总表的数据。明细有更新则同步更新汇总表,
winner2050 2010-07-14
  • 打赏
  • 举报
回复
每次都统计每个网店,就算统计一个能在100毫秒完成,总和起来也够久的。

不如加个统计表保存好统计数据。
tackey86 2010-07-14
  • 打赏
  • 举报
回复
没搞过,学习
amandag 2010-07-14
  • 打赏
  • 举报
回复
1. 考虑全文检索 前面有人说Lucene.net,我们以前用过sphinx,不过要把数据先导入到mysql里

2. 程序肯定是要优化的,好好衡量下时间复杂度和空间复杂度

3. 数据计算中频繁用到的数据考虑使用缓存而不是再次查询
段传涛 2010-07-14
  • 打赏
  • 举报
回复
1,要分页,
2,要存储过程
3,多用dataset 逐行读取(这样内存消耗较小)
4,需要用using 也就是用GC
5,将读取的结果存入Dictionary<key,value>类型中。
6,存入Dictionary<key,value>前先判断是否存在。

string value = "21001221110011";
if (openWith.TryGetValue("21001221110011", out value))
{
//存在的处理
}
else
{
//不存在的处理
}


guyehanxinlei 2010-07-14
  • 打赏
  • 举报
回复
非得用MS SQL 2000的话,可以考虑分表,
一个区域一张表,表名称按编号区分开,只是维护起来稍有些麻烦,但效果可以
liujintaozyc 2010-07-14
  • 打赏
  • 举报
回复
从网上查询下大都是这样的 这两天我也在研究下这东东 有好的建议希望能够及时交流liujintaohfbb@163.com
hmily821023 2010-07-14
  • 打赏
  • 举报
回复
1.windows程序本身怎样设计
耗时太多主要体现在数据库上,程序优化效果肯定不大

2.数据查询方面怎么优化
这么大的数据量肯定要做下集群了,
如果不能做,加个服务器安装sql做成算法服务器,用链接服务器的方式把计算量大的或复杂语句通过算法服务器解决,最好能把部分表分出来放在算法服务器,如果这个也不可能
那我建议你做个结果表把你最终想要的查询结果通过服务的方式定时同步到结果表
这样你查询的时候就是个select * from table
加载更多回复(14)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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