设为首页 收藏本站
查看: 737|回复: 0

[经验分享] oracle动态表数据分页查询

[复制链接]

尚未签到

发表于 2016-8-3 15:45:11 | 显示全部楼层 |阅读模式
from http://www.iyunv.com/problems/94041 

 
00
先做个物化试图。不行在分区。
2013年8月05日 16:00
DSC0000.jpg Java_大猫 
172 
0 0 22

 

  • DSC0001.jpg 添加评论

00
同样提议改成分区表,保持逻辑不变的话,使用函数分区。 

PARTITION BY TO_CHAR(CreateTime, 'YYYYMM') 

效果和你现在手工分区一样。 

然后在检索条件的列上建个global index。这个数据量,不可能会有问题。 

再说使用分区表,程序里会更简单。 

话说你们都买了Oracle,还手工分区?!! 

2013年4月21日 17:11
DSC0002.jpg clxy 
731 
0 3 59

 

  • 13条评论

00
改用分区表吧
2013年4月12日 11:58
DSC0003.jpg laibin1320 
3 
0 0 4

 

  • 添加评论

00
1:从你的表字段来看,单张表50万数据应该10m左右,也就是说一年的数据应该在在120m左右,所以做120m的缓存还是可行的(当然你的数据可能不仅是来源一张表,或是查询跨度很大,数据量很大,缓存需要就很大,这样可能会需要一些额外的投入了) 
2:从你的查询条件来看,跨越了3张表,数据量应该在100万的样子,或许你用了一条sql去查,但是我觉得1分多钟,实在让人难以忍受。 
  a:如果查询条件是时间段,考虑在时间字段上建索引(我看你查询条件是精确到日的,可以考虑对,对日期进行函数处理后,做该字段的 函数索引) 
  b:是否存在非必要的order by, 
  c:如果是union ,要在每个union 加上时间过滤 
  d:可以根据业务将数据进行合并,例如只允许查询最近5个月的数据,可以将最近五个月数据insert select 到一个表空间中。下次查询判断时间是否在临时表内,如果在,就直接查询,如果不在,就将不在范围的数据insert select 到临时表中。 
3:看看表空间利用情况吧,如果该数据库实例数据很大,表空间利用率很高(分表的数据文件可以放到不同的磁盘)

2013年4月12日 11:12
DSC0004.jpg zld406504302 
48 
0 0 8

 

  • 添加评论

00
50万条记录,一页10条,他不翻的吐血了。 
如果不需要总页数的话,不需要count可以提高性能。 
比如可以先搜索一天的数据作分页,当翻到最后的时候,自动搜索下一天的数据,继续翻页.[最好把一天的数据cache到缓存,可以减少与数据库的交互].

2013年4月11日 16:35
DSC0005.jpg a123159521 
50 
0 0 5

 

  • 添加评论

00
建议用缓存+多线程,第一次查询的时候多起几个线程分别查询这几张表,将查询的几个大记录合并发送至缓存服务器,翻页的时候直接从缓存中取对应的开始序号到结束序号,我公司的系统(用户表有30张)就是这么搞的。
2013年4月11日 16:13
DSC0006.jpg zyn010101 
1747 
1 3 95

 

  • 2条评论

00
1、分页查数据 每次记录最后的PKID  
2、下次查询时 加上 pkid > 上次最大的id 
这样可缩小数据范围 而且每次取第一页 


40w不是很多  你执行下explain看下有没有走索引

2013年4月11日 15:52
jinnianshilongnian 
7042 
1 3 576

 

  • 6条评论

00
你可以尝试使用存储过程,在里面根据条件查询出几张表共有多少条符合条件, 
每次去查询的时候不一定要查询几张表,而是根据条件去查询一张单独的表,要是有涉及到两张表以上的情况,则说明分页的数据可能跨越2张表或者是三张表,总之尽量查询一张表,只有查询的数据介于两张表之间,才去关联,这里面的存储过程应该比较复杂。

2013年4月11日 15:47
jinbingchuan 
604 
0 2 43

 

  • 添加评论

00
避免用union all/union这样的语句join后再套一层select和rownum之类的做分页 
如果除了时间外没有其他查询条件了,你可以建一些统计表,比如2月份多少条,3月份多少条,这样,然后看你要查第几页,直接定位到那张表 
如果有其他查询条件就很麻烦了,要统计各种查询条件下每张表有几条记录这样,当然如果条件可能性太多了,可能这个方法就不太方便了

2013年4月11日 15:43
Deathless 
65 
0 0 3

 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-252383-1-1.html 上篇帖子: ORACLE时间计算相关函数整理 下篇帖子: Oracle正则表达式的用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表