oracle 10g 的 组合分区 range-list 如何高效呢?

客家族_Shark曾_小凡仙
博客专家认证
2010-03-11 03:59:29
有10个部门销售数据表 sales_his 包含2007至今的数据共 1,1755,6405 近亿条数据,大小12400M。

现在按照月进行了范围分区和本地局部销售时间索引。 可有些查询还是很慢,这些查询主要是查某个销售部门几个月的销售数据的统计。

访问这几个月数据必然扫描其他9个部门该月的数据,一般一个统计要跑上6-15分钟。

如何提高统计速度呢?

想到了组合分区 用列表+范围分区 可惜oracle 10g 不支持啊!

用范围-列表组合分区 不知道oracle 如何去访问呢?
...全文
395 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
范围-列表 分区 和 列表-范围 分区的 性能 谁比较高 按照上面的查询要求来讲


如果 列表-范围 分区 要找A部门3个月销售数据 直观理解 先从10个分区中定位到A主分区,然后在定位到3个子分区中。那么oracle 访问比较简单,数据路径很直观。

反之 范围-列表 分区 要找A部门3个月销售数据 直观理解 先从40个月的主分区中 找到3个月的分区,然后进入其中个分区 找到A部门子分区,取出数据后。返回到第二个月分区,再找到A子分区 如此重复3次。
那么 oracle 访问路径就复杂化了。

 就不知道 会不会访问不必要的数据呢?
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 47522341 的回复:]
如果按照楼主所说的,10个部门,2007年开始至今约40个月,共1,1755,6405 条记录,大概算一下每个月的数据接近300万,由于你查询的是某个部门几个月的数据,按3个月算,也有进千万条。由于部门的选择性太差,只有十分之一,所以查询的时候部门相关的索引基本不会走。这样大量的数据查询,速度是很夸张的。
一个可行的接近方案是按照查询规律将前几个月的数据提前汇总,而不是每次都去检索其明细记录,这样可以大幅减少关联数据,从而减少查询时间。
[/Quote]

你的意思我明白 其实我用存储过程把统计数据做好了,用户只要通过页面从结果表取就是了。

问题是 那些不定时 复杂性,类似于数据分析的 SQL 得 人工去查!


所以我没有建立部门ID索引

才考虑 组合分区法 因为如此 才能最低减少oracle 访问量!


现在做了个 rang_list 组合分区

执行计划
partition rage all
partition list singel
table access full

47522341 2010-03-11
  • 打赏
  • 举报
回复
如果按照楼主所说的,10个部门,2007年开始至今约40个月,共1,1755,6405 条记录,大概算一下每个月的数据接近300万,由于你查询的是某个部门几个月的数据,按3个月算,也有进千万条。由于部门的选择性太差,只有十分之一,所以查询的时候部门相关的索引基本不会走。这样大量的数据查询,速度是很夸张的。
一个可行的接近方案是按照查询规律将前几个月的数据提前汇总,而不是每次都去检索其明细记录,这样可以大幅减少关联数据,从而减少查询时间。
suiziguo 2010-03-11
  • 打赏
  • 举报
回复
这个大数据,更改要谨慎啊。


最好经过测试,看看相应执行计划,比较下再动手。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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