这里有新鲜出炉的 Mysql 教程,程序狗速度看过来!
MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典 MySQL AB 公司。MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。
MySQL 分区常用的是:range、list、hash、key,Oracle10g 分区常用的是:range(范围分区)、list(列表分区)、hash(哈希分区)、range-hash(范围—哈希分区)、range-list(列表—复合分区)。下面通过本文详细给大家介绍 Oracle10 个分区和 Mysql 分区区别,一起看看
Oracle10g 分区常用的是:range(范围分区)、list(列表分区)、hash(哈希分区)、range-hash(范围—哈希分区)、range-list(列表—复合分区)。
Range 分区:Range 分区是应用范围比较广的表分区方式,它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的 range 分区中。
如按照时间划分,2010 年 1 月的数据放到 a 分区,2 月的数据放到 b 分区,在创建的时候,需要指定基于的列,以及分区的范围值。
在按时间分区时,如果某些记录暂无法预测范围,可以创建 maxvalue 分区,所有不在指定范围内的记录都会被存储到 maxvalue 所在分区中。如:
- createtable pdba (id number, time date) partition by range (time)
- (
- partitionp1 values less than (to_date('2010-10-1', 'yyyy-mm-dd')),
- partitionp2 values less than (to_date('2010-11-1', 'yyyy-mm-dd')),
- partitionp3 values less than (to_date('2010-12-1', 'yyyy-mm-dd')),
- partitionp4 values less than (maxvalue)
- )
Hash 分区:
对于那些无法有效划分范围的表,可以使用 hash 分区,这样对于提高性能还是会有一定的帮助。hash 分区会将表中的数据平均分配到你指定的几个分区中,列所在分区是依据分区列的 hash 值自动分配,因此你并不能控制也不知道哪条记录会被放到哪个分区中,hash 分区也可以支持多个依赖列。如:
- createtable test
- (
- transaction_idnumber primary key,
- item_idnumber(8) not null
- )
- partitionby hash(transaction_id)
- (
- partitionpart_01 tablespace tablespace01,
- partitionpart_02 tablespace tablespace02,
- partitionpart_03 tablespace tablespace03
- );
在这里,我们指定了每个分区的表空间。
List 分区:
List 分区也需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像 range 或者 hash 分区那样同时指定多个列做为分区依赖列,但它的单个分区对应值可以是多个。
在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入 / 更新就会失败,因此通常建议使用 list 分区时,要创建一个 default 分区存储那些不在指定范围内的记录,类似 range 分区中的 maxvalue 分区。
在根据某字段,如城市代码分区时,可以指定 default,把非分区规则的数据,全部放到这个 default 分区。如:
- createtable custaddr
- (
- idvarchar2(15 byte) not null,
- areacodevarchar2(4 byte)
- )
- partitionby list (areacode)
- (partition t_list025 values ('025'),
- partitiont_list372 values ('372') ,
- partitiont_list510 values ('510'),
- partitionp_other values (default)
- )
组合分区:
如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。
组合分区呢在 10g 中有两种:range-hash,range-list。注意顺序,根分区只能是 range 分区,子分区可以是 hash 分区或 list 分区。
如:
- createtable test
- (
- transaction_idnumber primary key,
- transaction_datedate
- )
- partitionby range(transaction_date) subpartition by hash(transaction_id)
- subpartitions3 store in (tablespace01,tablespace02,tablespace03)
- (
- partitionpart_01 values less than(to_date('2009-01-01','yyyy-mm-dd')),
- partitionpart_02 values less than(to_date('2010-01-01','yyyy-mm-dd')),
- partitionpart_03 values less than(maxvalue)
- );
- createtable emp_sub_template (deptno number, empname varchar(32), grade number)
- partitionby range(deptno) subpartition by hash(empname)
- subpartitiontemplate
- (subpartitiona tablespace ts1,
- subpartitionb tablespace ts2,
- subpartitionc tablespace ts3,
- subpartitiond tablespace ts4
- )
- (partitionp1 values less than (1000),
- partitionp2 values less than (2000),
- partitionp3 values less than (maxvalue)
- );
- createtable quarterly_regional_sales
- (deptnonumber, item_no varchar2(20),
- txn_datedate, txn_amount number, state varchar2(2))
- tablespacets4
- partitionby range (txn_date)
- subpartitionby list (state)
- (partitionq1_1999 values less than (to_date('1-apr-1999','dd-mon-yyyy'))
- (subpartitionq1_1999_northwest values ('or', 'wa'),
- subpartitionq1_1999_southwest values ('az', 'ut', 'nm'),
- subpartitionq1_1999_northeast values ('ny', 'vm', 'nj'),
- subpartitionq1_1999_southeast values ('fl', 'ga'),
- subpartitionq1_1999_northcentral values ('sd', 'wi'),
- subpartitionq1_1999_southcentral values ('ok', 'tx')
- ),
- partitionq2_1999 values less than ( to_date('1-jul-1999','dd-mon-yyyy'))
- (subpartitionq2_1999_northwest values ('or', 'wa'),
- subpartitionq2_1999_southwest values ('az', 'ut', 'nm'),
- subpartitionq2_1999_northeast values ('ny', 'vm', 'nj'),
- subpartitionq2_1999_southeast values ('fl', 'ga'),
- subpartitionq2_1999_northcentral values ('sd', 'wi'),
- subpartitionq2_1999_southcentral values ('ok', 'tx')
- ),
- partitionq3_1999 values less than (to_date('1-oct-1999','dd-mon-yyyy'))
- (subpartitionq3_1999_northwest values ('or', 'wa'),
- subpartitionq3_1999_southwest values ('az', 'ut', 'nm'),
- subpartitionq3_1999_northeast values ('ny', 'vm', 'nj'),
- subpartitionq3_1999_southeast values ('fl', 'ga'),
- subpartitionq3_1999_northcentral values ('sd', 'wi'),
- subpartitionq3_1999_southcentral values ('ok', 'tx')
- ),
- partitionq4_1999 values less than ( to_date('1-jan-2000','dd-mon-yyyy'))
- (subpartitionq4_1999_northwest values ('or', 'wa'),
- subpartitionq4_1999_southwest values ('az', 'ut', 'nm'),
- subpartitionq4_1999_northeast values ('ny', 'vm', 'nj'),
- subpartitionq4_1999_southeast values ('fl', 'ga'),
- subpartitionq4_1999_northcentral values ('sd', 'wi'),
- subpartitionq4_1999_southcentral values ('ok', 'tx')
- )
- );
MySQL 分区常用的是:range、list、hash、key
RANGE 分区 (portioning):根据列值所属的范围区间,将元组分配到各个分区。
LIST 分区:类似于按 RANGE 分区,区别在于 LIST 分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH 分区:根据用户定义的函数的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含 MySQL 中有效的、产生非负整数值的任何表达式。
KEY 分区:类似于按 HASH 分区,区别在于 KEY 分区只支持计算一列或多列,且 MySQL 服务器提供其自身的哈希函数。
以上所述是小编给大家介绍的 Oracle10 个分区和 Mysql 分区区别详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/0815/339452.html