2013年7月20日星期六

对单表数据超过1亿的数据查询时候 须默认时间段查询条件

http://wmcxy.iteye.com/blog/1319709

项目基本情况

最近系统碰到一个非常头疼的问题,数据库采用oracle10G,主备机模式,采用shareplex做数据同步,一个表销售数据近2亿数据,提供16万企业做服务;

问题描述

原始设计时候,给企业查询小孩搜明细的时候,并没有考虑时间段条件,而是按照企业id号进行查询,在一开始,数据量不大时候,没有任何,当数据接近1亿的时候,就出现大问题了,因为有一部分企业的数据量非常大,导致此单独按照此企业查询明细数据时候,数据量比较大,大概会有接近50万数据,因为没有默认时间段查询,查询结果集非常大,结果导致此明细查询的IO消耗非常大,因为默认只有企业ID条件,不管怎么做索引,都无法解决此sql的io性能问题,最终解决方法就是,默认增加时间段条件,默认只查询该企业最新一月时间明细数据,然后企业id和时间段的联合索引才解决此问题,真是一个sql,消耗死一台数据库

结论

在做类似过亿数据量表的应用时候,如果涉及到明细数据查询时候,必须增加默认查询时间(一个月或者按照淘宝的三个月),以减少数据库的IO消耗

没有评论:

发表评论