- 浏览: 171035 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
GreatExpectations:
666可以可以哦
js并行加载,顺序执行 -
yiway:
如果是跨域的话,window.parent是拒绝访问的(由于w ...
利用HTML5的window.postMessage实现跨域通信 -
yiway:
如果是跨域的话,window.parent是决绝访问的(由于w ...
利用HTML5的window.postMessage实现跨域通信
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp51
[align=center;]
Oracle之range,hash,list分区现实应用及优缺点汇总
[/align]
引言:Oracle的range,hash,list三大分区可能我们大家在熟悉不过了,但什么每种分区适用于什么场景可能是很多人的疑惑点,那么在选择不同的分区时应该注意什么,为什么这么选,有哪些需要我们加以注意的地方,让我们一一来探索一下吧:)
A.创建range分区,一般用于日期化处理,range分区可以很好的管理基于日期来分区的数据
创建一个新用户ls
SYS@LEO> create user ls identified by ls;
SYS@LEO> grant dba to ls;
SYS@LEO> conn ls/ls
创建样本数据表
create table liusheng (orderid number(10),name varchar2(10),ls_date date);
insert into liusheng values (1,'ls1',to_date('1981-01-02','yyyy-mm-dd'));
insert into liusheng values (1,'ls2',to_date('1998-01-03','yyyy-mm-dd'));
insert into liusheng values (1,'ls3',to_date('1999-01-04','yyyy-mm-dd'));
insert into liusheng values (1,'ls4',to_date('2000-01-05','yyyy-mm-dd'));
insert into liusheng values (1,'ls5',to_date('2000-01-06','yyyy-mm-dd'));
insert into liusheng values (1,'ls6',to_date('2001-01-07','yyyy-mm-dd'));
insert into liusheng values (1,'ls7',to_date('2001-01-08','yyyy-mm-dd'));
insert into liusheng values (1,'ls8',to_date('2002-01-09','yyyy-mm-dd'));
insert into liusheng values (1,'ls9',to_date('2002-01-10','yyyy-mm-dd'));
insert into liusheng values (1,'ls10',to_date('2011-01-11','yyyy-mm-dd'));
创建range分区表
create table liusheng_part
partition by range (ls_date)
(
partition liusheng_part_1999_1 values less than (to_date('1999-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2000_1 values less than (to_date('2000-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2001_1 values less than (to_date('2001-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2002_1 values less than (to_date('2002-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2003_1 values less than (to_date('2003-01-01','yyyy-mm-dd')) ,
partition other values less than (maxvalue)
)
as select * from liusheng;
查看分区
select * from liusheng_part partition (liusheng_part_1999_1);
select * from liusheng_part partition (liusheng_part_2000_1);
select * from liusheng_part partition (liusheng_part_2001_1);
select * from liusheng_part partition (liusheng_part_2002_1);
select * from liusheng_part partition (liusheng_part_2003_1);
select * from liusheng_part partition (other);
B.创建hash分区,利用hash函数打散某列使数据均匀分布,一般用于均衡I/O,缺点数据不容易管理,哈希分区不能DROP、SPLIT 以及MERGE分区
我们创建了拥有10个分区的哈希分区表“LIUSHENG_HASH”
LS@LEO> create table liusheng_hash partition by hash(object_id) partitions 10 as select * from dba_objects;
hash分区所占用的区个数,看每个分区占用的个数都差不多,说明数据还是比较均匀分布的
缺点:hash列上数值不能有太多的重复值,否则会导致数据分布不均匀
select partition_name,count(*) from user_extents where segment_name='LIUSHENG_HASH' group by partition_name;
PARTITION_NAME COUNT(*)
------------------------------ ----------
SYS_P27 3
SYS_P26 3
SYS_P22 2
SYS_P28 3
SYS_P29 2
SYS_P21 2
SYS_P23 3
SYS_P25 3
SYS_P30 2
SYS_P24 3
select count(*) from liusheng_hash;
COUNT(*)
----------
9860
C.创建list分区,一般用于数据可枚举,有限个值,可以考虑列表分区,例如国家名字,按州来分区
创建list分区表,我们按国家来分别存放在不同的州,每个州是一个分区
create table liusheng_list
(city_id NUMBER(5),
city_name VARCHAR2(30),
city_state VARCHAR2(20),
city_amount NUMBER(10)
)
partition by list (city_name)
(
partition asia VALUES('china','japan'),
partition europe VALUES ('germany','italy'),
partition africa VALUES('libya','brazil'),
partition other VALUES(DEFAULT) --默认分区
);
插入数据
insert into liusheng_list values(1,'china','asia',100);
insert into liusheng_list values(2,'germany','europe',101);
insert into liusheng_list values(3,'libya','africa',102);
insert into liusheng_list values(4,'liusheng_city','other',103);
查看数据
LS@LEO> select * from liusheng_list;
CITY_ID COUNTRY_NAME STATE CITY_AMOUNT
---------- ------------------------------ -------------------- -----------
1 china asia 100
2 germany europe 101
3 libya africa 102
4 liusheng_city other 103
小结:测试了上面的三大分区后,我相信现在不仅仅有感性的认识而且也加深了理性的认识,分区是个好东西,合理的利用可以提高我们管理收益(但不一定会提高查询收益),使用不当也会给我们添加许多麻烦,三思而后行是做DBA的一个好习惯。
补充:分区之优势
分区技术实质可以把数据分摊到不同的物理位置,增加I/O负载,提高检索效率。
可用性:分区表可以跨越表空间,而普通表则不然,好处就是如果表的一个分区损坏,其他分区不会受到影响我们只需要修复损坏的分区即
可
[align=center;]
Oracle之range,hash,list分区现实应用及优缺点汇总
[/align]
引言:Oracle的range,hash,list三大分区可能我们大家在熟悉不过了,但什么每种分区适用于什么场景可能是很多人的疑惑点,那么在选择不同的分区时应该注意什么,为什么这么选,有哪些需要我们加以注意的地方,让我们一一来探索一下吧:)
A.创建range分区,一般用于日期化处理,range分区可以很好的管理基于日期来分区的数据
创建一个新用户ls
SYS@LEO> create user ls identified by ls;
SYS@LEO> grant dba to ls;
SYS@LEO> conn ls/ls
创建样本数据表
create table liusheng (orderid number(10),name varchar2(10),ls_date date);
insert into liusheng values (1,'ls1',to_date('1981-01-02','yyyy-mm-dd'));
insert into liusheng values (1,'ls2',to_date('1998-01-03','yyyy-mm-dd'));
insert into liusheng values (1,'ls3',to_date('1999-01-04','yyyy-mm-dd'));
insert into liusheng values (1,'ls4',to_date('2000-01-05','yyyy-mm-dd'));
insert into liusheng values (1,'ls5',to_date('2000-01-06','yyyy-mm-dd'));
insert into liusheng values (1,'ls6',to_date('2001-01-07','yyyy-mm-dd'));
insert into liusheng values (1,'ls7',to_date('2001-01-08','yyyy-mm-dd'));
insert into liusheng values (1,'ls8',to_date('2002-01-09','yyyy-mm-dd'));
insert into liusheng values (1,'ls9',to_date('2002-01-10','yyyy-mm-dd'));
insert into liusheng values (1,'ls10',to_date('2011-01-11','yyyy-mm-dd'));
创建range分区表
create table liusheng_part
partition by range (ls_date)
(
partition liusheng_part_1999_1 values less than (to_date('1999-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2000_1 values less than (to_date('2000-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2001_1 values less than (to_date('2001-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2002_1 values less than (to_date('2002-01-01','yyyy-mm-dd')) ,
partition liusheng_part_2003_1 values less than (to_date('2003-01-01','yyyy-mm-dd')) ,
partition other values less than (maxvalue)
)
as select * from liusheng;
查看分区
select * from liusheng_part partition (liusheng_part_1999_1);
select * from liusheng_part partition (liusheng_part_2000_1);
select * from liusheng_part partition (liusheng_part_2001_1);
select * from liusheng_part partition (liusheng_part_2002_1);
select * from liusheng_part partition (liusheng_part_2003_1);
select * from liusheng_part partition (other);
B.创建hash分区,利用hash函数打散某列使数据均匀分布,一般用于均衡I/O,缺点数据不容易管理,哈希分区不能DROP、SPLIT 以及MERGE分区
我们创建了拥有10个分区的哈希分区表“LIUSHENG_HASH”
LS@LEO> create table liusheng_hash partition by hash(object_id) partitions 10 as select * from dba_objects;
hash分区所占用的区个数,看每个分区占用的个数都差不多,说明数据还是比较均匀分布的
缺点:hash列上数值不能有太多的重复值,否则会导致数据分布不均匀
select partition_name,count(*) from user_extents where segment_name='LIUSHENG_HASH' group by partition_name;
PARTITION_NAME COUNT(*)
------------------------------ ----------
SYS_P27 3
SYS_P26 3
SYS_P22 2
SYS_P28 3
SYS_P29 2
SYS_P21 2
SYS_P23 3
SYS_P25 3
SYS_P30 2
SYS_P24 3
select count(*) from liusheng_hash;
COUNT(*)
----------
9860
C.创建list分区,一般用于数据可枚举,有限个值,可以考虑列表分区,例如国家名字,按州来分区
创建list分区表,我们按国家来分别存放在不同的州,每个州是一个分区
create table liusheng_list
(city_id NUMBER(5),
city_name VARCHAR2(30),
city_state VARCHAR2(20),
city_amount NUMBER(10)
)
partition by list (city_name)
(
partition asia VALUES('china','japan'),
partition europe VALUES ('germany','italy'),
partition africa VALUES('libya','brazil'),
partition other VALUES(DEFAULT) --默认分区
);
插入数据
insert into liusheng_list values(1,'china','asia',100);
insert into liusheng_list values(2,'germany','europe',101);
insert into liusheng_list values(3,'libya','africa',102);
insert into liusheng_list values(4,'liusheng_city','other',103);
查看数据
LS@LEO> select * from liusheng_list;
CITY_ID COUNTRY_NAME STATE CITY_AMOUNT
---------- ------------------------------ -------------------- -----------
1 china asia 100
2 germany europe 101
3 libya africa 102
4 liusheng_city other 103
小结:测试了上面的三大分区后,我相信现在不仅仅有感性的认识而且也加深了理性的认识,分区是个好东西,合理的利用可以提高我们管理收益(但不一定会提高查询收益),使用不当也会给我们添加许多麻烦,三思而后行是做DBA的一个好习惯。
补充:分区之优势
分区技术实质可以把数据分摊到不同的物理位置,增加I/O负载,提高检索效率。
可用性:分区表可以跨越表空间,而普通表则不然,好处就是如果表的一个分区损坏,其他分区不会受到影响我们只需要修复损坏的分区即
可
发表评论
-
oracle查看锁和释放锁
2014-07-02 15:34 939详见: http://blog.yemou.net/art ... -
索引与优化like查询
2014-05-29 08:28 631详见: http://blog.yemou ... -
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
2014-03-31 18:15 723详见: http://blog.yemou.net/a ... -
Oracle数据库悲观锁与乐观锁详解
2014-03-31 18:11 803详见: http://blog.yemou ... -
sql优化策略之索引失效情况二
2014-01-20 18:16 1455详见: http://blog.yemou.n ... -
oracle数据块核心剖析
2013-12-27 16:07 749详见: http://blog.yemou.n ... -
oracle得到日期对应的星期
2013-12-27 15:58 693详见: http://blog.yemou.net/art ... -
oracle 索引失效的情况分析
2013-12-12 10:56 1449见:http://blog.yemou.net/articl ... -
ORACLE ROWNUM解析
2013-12-10 16:35 1111详见:http://blog.yemou.net/ ... -
oracle锁表问题解决方法
2013-12-10 16:34 744详见:http://blog.yemou.net/articl ... -
oracle数据库的锁类型
2013-12-10 16:31 1278数据库是一个多用户使用的共享资源。当多个用户并 ... -
Oracle 的process和Session
2013-10-25 13:49 859Oracle 的process和Session ... -
理解oracle中连接和会话
2013-10-25 09:58 721详见:http://blog.yemou.net/ ... -
sql in 和 exist的区别
2013-07-17 16:17 1132详见:http://blog.yemou.net/articl ... -
distinct和group by 去掉重复数据分析
2013-07-17 13:55 1454详见:http://blog.yemou.net/articl ... -
sql执行机制
2013-05-30 15:40 862详见:http://blog.yemou.net/ ...
相关推荐
#### 二、Oracle 分区的优缺点 ##### 优点: - **增强可用性**:即使某个分区出现故障,其他分区的数据仍然可用。 - **简化维护**:如果某个分区发生问题,只需对该分区进行修复即可。 - **均衡 I/O**:可以通过将...
Oracle支持多种分区策略,包括范围分区(Range Partitioning)、列表分区(List Partitioning)、哈希分区(Hash Partitioning)以及复合分区(Composite Partitioning)。在本例中,我们关注的是范围分区,特别是在...
2. List分区:List分区则是根据列值的明确定义列表来进行划分,每个分区对应一个或多个特定的值。这种分区适用于列值是离散且已知的情况,比如城市代码。需要预先定义所有可能的值,或者创建一个`default`分区来处理...
Oracle 分区表及分区索引 Oracle 分区表是指将一个大表分割成多个小表,每个小表称为一个分区,分区表的优点是可以提高查询性能、改善管理型、增强容错性等。 分区表的分类: 1. 范围分区(Range Partitioning) ...
然后,讨论了Oracle分区表的类型,包括范围分区(Range)、散列分区(Hash)、列表分区(List)、组合分区(Subpartition)、Interval分区和引用分区(Reference)。每种类型的分区都有其特点和应用场景。 在 VLDB ...
根据提供的文件信息,本文将详细解释Oracle分区技术及其在解决UNDOTBS01.DBF文件过大问题中的应用方法,并进一步探讨Oracle分区的不同类型及其应用场景。 ### Oracle 分区概述 Oracle分区是一种将大表或索引分割成...
- **List分区**:根据列出的具体键值分配数据。 - **组合分区**:结合以上两种或多种分区方法,例如Range-Hash分区。 #### 四、创建分区表和索引 ##### 创建Range分区 ```sql CREATE TABLE sales ( sale_date DATE...
本文将详细介绍分区表的概念、作用、优缺点,以及各种类型的分区表及其创建方法。 1. **表空间与分区表的概念** - 表空间(Tablespace):在Oracle数据库中,表空间是存储数据的主要容器,由一个或多个数据文件...
3. List分区:用户可以指定具体值将数据分配到特定分区,但不支持多列分区。 4. 范围-散列分区:先进行范围分区,再在每个范围内使用散列分区,适用于数据再平衡场景。 5. 范围-列表分区:结合范围和列表分区,首先...
- **List分区**:基于预定义的值列表进行分区。 - **Hash分区**:根据哈希函数的结果进行分区,提供均匀的数据分布。 - **Composite分区**:组合多种分区方法,如range-hash和range-list组合分区。 7. **Range...
### 详解 Oracle 10g 的分区技术 #### 一、分区概述 在数据库管理领域,**分区**是一种...在实际应用中,应根据具体的业务场景和数据特点,综合考虑以上提到的各种分区方法及其优缺点,以达到最佳的数据库设计效果。
Oracle支持多种类型的分区方式,包括范围分区(range partitioning)、列表分区(list partitioning)、散列分区(hash partitioning)和复合分区(composite partitioning)。本示例主要关注范围分区。 #### 四、实例详解 ...
分区技术在Oracle 10g R2版本中支持四种类型:范围分区(Range)、列表分区(List)、散列分区(Hash)和组合分区(Range-List和Range-Hash)。范围分区基于特定值的范围将数据分至不同分区,例如按日期创建的业务...
描述与标签:本文将深入探讨Oracle分区表的创建、管理以及查询技巧,重点包括范围分区(RANGE)、哈希分区(HASH)和列表分区(LIST),并涵盖复合分区(COMPOUND PARTITIONING)的概念。 ### 一、Oracle分区表概述...
总之,Oracle的分区技术是大型数据库管理的关键策略之一,它有助于提升数据处理效率,简化维护工作,并提供更好的数据组织和管理能力。通过理解和正确应用这些分区策略,可以显著改善数据库的性能和可管理性。
特别是在Oracle 10g版本中,支持了三种主要的分区表创建方式:范围分区(Range)、哈希分区(Hash)以及列表分区(List)。此外,还支持组合分区方式,例如Range-Hash、Range-List等。 #### 一、范围分区(Range) ...
5. **区间-散列分区**(Range-Hash Partitioning)和**列表-散列分区**(List-Hash Partitioning)也是复合分区的变种。 6. **全局索引分区**:当对分区表创建索引时,可以选择创建全局索引,索引覆盖所有分区,...