关于大数据量查询报表优化

针对数据量巨大的报表查询,总结了一下几个处理方法:
看一个运用案例:多粒度(年月日,省、地市、热点、ac、ap)下每天20W条,每月800W条,自由选择35天内数据的查询。
直接查询页面崩溃,运用了以下几点,基本上能保证在1-2分钟(100秒左右)内页面相应加载。

[b]一:表分区[/b]
当某张表每天都有上十万,百万的数据量时,考虑每天创建一个分区来存储每天的数据。

[b]二:粒度汇聚[/b]
报表查询中遇到多粒度分组查询的,事先将粒度数据单独汇聚成表,按粒度查询。

[b]三:索引创建[/b]
给关键使用的几个字段创建索引,注意不能使用like对索引字段操作,索引字段也不能使用运算符,否则创建的索引不生效。

[b]四:分页加载[/b]
由于查找的数据量大,一定要用分页加载的方式给页面返回数据。需要注意的是分页的返回条数也不要设置的太小,不然数据页数处理增加也会影响sql速度。比如每页30条数据,在数据量为20W的情况下,比每页15条就快不少。另外注意的是,分页其实分两部分,一部分是count(*),另一部分就是查找返回30条。

[b]五:并行度(/*+ parallel */ )[/b]
当数据量过大时还可以考虑打开数据库的并行度,这样用资源空间换取时间。

创建oracle多线程:

select /*+ parallel(t ,64) */ nick,id from seller t

其中64 代表线程数,这个数最好与linux版本位数一致。

[b]六:加大neginx相应时间[/b]
通过以上5个步骤如果页面相应时间还是比较长的话,页面还是会崩溃掉,没办法只好设置neginx的响应时长了。

你可能感兴趣的:(RUBY,oracle)