4 千万数据查询

NLP爱好者 2011-05-28 02:25:24
我要从 4千万的的数据表中查询 2千万的数据,然后对这2千万的数据进行分组求和,然后排序,再取出前100的记录,有什么好办法,请高手赐教!!

其中查询过滤的字段collect_date是一个时间类型(其中需要的查询范围为:2011-05-01 到 2011-05-26),我考虑在这个字段上建立的是位图索引,发现这个查询相当的慢 啊!!!但是建立Btree索引,根本就不会使用索引,因为数据量太大了.


注意:查询出来经过分组求和,排序后,大概的数据量是4万条左右。请问,有什么更好的办法,客户说这个查询太慢了,我都无语了,这么大的数据量,查询不慢才怪,可是我已经黔驴技穷了!!!!


急~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...全文
312 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
NLP爱好者 2011-06-04
  • 打赏
  • 举报
回复
问题解决了,结果不是sql查询问题,也不是索引问题,而是内存、cpu、swap耗尽,有个服务进程关掉,就好了,查询最多两分钟就出来。

不过通过表抽样分析以后,查询更快了。


所以遇到oracle问题,首先需要查看系统资源,再看sql性能。
iqlife 2011-05-31
  • 打赏
  • 举报
回复
如果只从SQL层面优化的话,
首先查看执行计划,看哪些查询造成的低效,
其次再想办法解决低效部分(例如加索引,强制HINT索引.....等)
wj539h 2011-05-31
  • 打赏
  • 举报
回复
我也一样在等待呢!
lanlandetian 2011-05-31
  • 打赏
  • 举报
回复
1楼说法没错啊,我们公司很多系统都是通过日结方式实现的。

仅实现分组排序功能将数据拆分成小段应该是没有影响的啊
NLP爱好者 2011-05-30
  • 打赏
  • 举报
回复
怎么没有人回答呢 !
NLP爱好者 2011-05-28
  • 打赏
  • 举报
回复
请教,并行是什么个情况,不太明白,是并行查询么,还是并行处理。

这个表不是实时的,是一天往里插入一次数据。由于数据特点,不能做日结和小时结算,如果那样算,就会出现数据不准确。
如下:

加入今天有3个人来上班。
前天有5个人来上班。

那么这两天一共有多少人来上班??因为可能两天又同一个人在其中,所以统计的时候,必须将对两天去重处理才能得到正确的结果。

所以想把数据分批插入到分区表中,然后查询分区表?但是不知道建立什么类型的分区表好,肯定不能以日期来建立,因为表中日期是4月1号 到5月27号的数据。总共4千多万。查询就是
2011-05-01 到 2011-05-26号。
大家有什么建议啊 !



deng8818 2011-05-28
  • 打赏
  • 举报
回复
看来在作一个数据库设计时,就一定要有先见之明,对大表一定要预计,并坚决用partition table.
tangren 2011-05-28
  • 打赏
  • 举报
回复
1、这种数据量的统计操作一般不要实时统计查询。如果这是一个频繁操作就是不合适的。
可以考虑采用是日结,小时结等方式,取决于要求数据统计的实时程度。

2、存放超过千万数据量的表,是要进行分区的;如果一次性对种数据量进行操作,
从数据的选择性来看,50%一般不合适使用索引的。全表扫描是较好的选择,
这时可以考虑采用并行。
版本:presto-server-0.214.tar软件版本 presto-cli-0.214-executableCentOS71、presto的起因 hadoop ---hdfs----MR(java)-----hivehive底层原理用MR,速度比较慢,公司hadoop集群主要集中于晚上到凌晨,平日工作时间负载不是很高。但在工作时间内,公司业务人员有实时查询的需求,现在主要借助于hive提供业务人员的查询。hive是基于MR类的SQL查询工具,他会输入的查询SQL解析为MapReduce,能极大的降低使用大数据门槛,让一般的业务人员可以直接准对大数据进行查询,但是有一个利弊,它的查询基于MR,会让人等待比较着急,等待的时间可能是几个小时或者一天。 spark基于内存提高改良的hive,sql,现在factbook在hive上面开发一套利器,准对hive可以通过sql语句快速查询,presto。2、Facebook为何开发Presto  Facebook的2011的数据仓库存储在少量大型hadoopfs集群,Hive是FaceBook在几年前专门为Hadoop打造的一款数据仓库工具,在以前,facebook的科学家和分析师一直靠hive进行数据分析.但hive使用MR作为底层计算框架,是专为批处理设计的,但是随着数据的不断增多,使用hive进行一个简单的数据查询可能要花费分钟或者几个小时,显然不能满足查询需求,FaceBooke也调研了其他比hive更快的工具,但是他们需要在功能有限的条件下做简单操作,以至于无法操作Facebook庞大的数据要求。2012年开始研究自己的框架--presto,每日可以超过1pb查询,而且速度比较快,faceBook声称Presto的性能比hive要好上10倍或者100倍,presto和hive都是facebook开发的 Presto是一个开源的分布式SQL查询引擎,适用于交互式查询数据量支持GB到PB字节。Presto的设计和编写完全是为了解决Facebook这样规模的商业数据仓库交互式分析和处理速度的问题Presto可以做什么 Presto支持在线数据查询,包括Hive kafka Cassandra关系数据库以及专门数据存储,一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析。Presto以分析师的需求作为目标,他们期望相应速度小于1秒到几分钟,Presto要么在使用速度的快的昂贵的商业方案,提高内存,要么是消耗大量的硬件进行快速查询。(128G 64G)本套课程教给如何在企业环境中使用Presto技术。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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