分区表查询

bunrise 2010-04-13 03:26:52
各位,查询分区表和普通查询有什么区别,
分区表的意义是什么?
一般多少数据才建立分区表
...全文
190 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bunrise 2010-04-13
  • 打赏
  • 举报
回复
非常感谢楼上兄弟!
yuxinglian 2010-04-13
  • 打赏
  • 举报
回复

假如 [分区表] 在字段 [createdate] 上进行分区,每个月为一个分区:
2009年6月为分区P200906
2009年7月为分区P200907
2009年8月为分区P200908
。。。

执行SQL 使用分区键检索:
select * from 分区表 t where createdate > to_date('2009-07-12','yyyy-mm-dd') and createdate < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下,使用分区键进行索引,会自动在数据存在的区进行检索。因为开始区为2,结束区为3,一目了然。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ITERATOR Partition start=2 Partition stop=3
TABLE ACCESS FULL Partition start=2 Partition stop=3


执行SQL 不使用分区键检索:
select * from 分区表 t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下:没有使用分区键进行检索,那么则会查询全部的表分区。因为要查询的数据就在2和3分区上,其它的分区数据也被读取了,增大了数据库压力,效率低下。
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE ALL Partition start=1 Partition stop=31
TABLE ACCESS FULL Partition start=1 Partition stop=31

执行SQL 指定使用分区:
select * from 分区表 partition(P200907) t where sms_report_date > to_date('2009-07-12','yyyy-mm-dd') and sms_report_date < to_date('2009-08-12','yyyy-mm-dd')

执行计划如下:
SELECT STATEMENT, GOAL = ALL_ROWS
PARTITION RANGE SINGLE Partition start=2 Partition stop=2
TABLE ACCESS FULL Partition start=2 Partition stop=2

bunrise 2010-04-13
  • 打赏
  • 举报
回复
楼上两位能否在详细一点:
比如一张表T
select * from T
分区表B
select * from B

这两个查询有区别吗?分区表该怎么查效率才高呢?
tangren 2010-04-13
  • 打赏
  • 举报
回复
1、简单地说:分区表就是一个表包含多个分区,每一个分区就好象是一个普通意义上的表。
2、对大表管理更方便、可伸缩性好、查询效率更好(可以进行分区排除)。
3、没有明确的定义,一般几十万数据至百万数据以上。
更多:http://tianzt.blog.51cto.com/459544/171759
yuxinglian 2010-04-13
  • 打赏
  • 举报
回复
一般来说使用起来没有任何区别。

分区表只是将一个表的数据分成多个部分,存放在不同的数据文件, 这些数据文件存在不同的磁盘, 好处就是减少了磁盘文件IO量的竞争,在同一时间能支持更多的查询。

建分区表的原则要看自己的业务的特点

3,491

社区成员

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

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