oracle分区表的设计
分区是致力于解决支持最大的表和索引的关键问题。利用其分解成更小的、易于管理的方法称为分片(块)。一旦分区定义,SQL语句可以访问操作的分区而不是整个表,从而提高管理效率。分区数据仓库的应用是非常有效的,因为他们经常存储和分析大量的历史数据。
分区表的分类
范围分区(范围分区)
哈希分区(Hashi分区)
列表分区(列表分区)
复合范围散列分区(范围哈希组合分区)
复合范围列表分区(范围列表组合分区)
何时选择范围分区
一个表的记录必须根据列值的范围划分。你要处理一些数据,这往往是在一定的范围内,如一个月。如果数据能根据分区范围内均匀分布,它将获得最佳的性能。如果数据分布分布不均,你可以选择其他分区。
创建表的销售
(invoice_no数,
sale_year INT NOT NULL,
sale_month INT NOT NULL,
sale_day INT NOT NULL)
按范围分区(sale_year,sale_month,sale_day)
(分区sales_q1值小于(1999, 04,01)
表空间的TSA,
分区sales_q2值小于(1999, 07,01)
表空间TSB,
分区sales_q3值小于(1999, 10,01)
表空间的TSC,
分区sales_q4值小于(2000, 01,01)
表空间的TSD);
何时选择哈希分区
如果数据不易划分,你想提高性能和可管理性的表,哈希分区提供了一种交叉和均匀分布的数据在指定的分区数。线映射到基于分区键的哈希值对应的分区创建和使用散列分区。,你可以把数据灵活,你可以交叉访问的分区在不同的我/ O设备提高性能。
创建表scubagear(身份证号、姓名VARCHAR2(60))
散列(id)分区
分区4店(gear1,Gear2,GEAR3,Gear4);
何时选择列表分区
使用列表分区,你可以直接控制的一些数据映射到一些分区,你可以指定一个不连续的分区键的值为一个分区,这是由不同的范围分区(使用键值范围分区的分区),或哈希分区(不能控制,分区被映射)。
创建表q1_sales_by_region
(deptno号、部门名称VARCHAR2(20),quarterly_sales号码(10, 2),国家VARCHAR2(2))
按列表分区(状态)
(分区q1_northwest值(或,'wa),
分区q1_southwest值('az ','ut ','nm),
分区q1_northeast值('ny ','vm,新泽西州),
分区q1_southeast值('fl ','ga),
分区q1_northcentral值(高,装置的),
分区q1_southcentral值(好的,'tx '));
分区表的设计
如何选择分区的类型以及如何选择分区的列在此之前,你必须清楚你的目标——可管理性和绩效,你更关注哪些方面分区表的影响可以分为以下几个方面:性能、可管理性、数据清理。
以下是分区表对每个项目的特定效果,
性能:
这通常是分区的主要目的,分区将大表转换成小表,当其中的条件反映了分区字段的具体值之后,就避免了完整的表扫描。
易于管理:
对于包含大量数据的大表,分区的可管理性非常明显。当您推荐基于非分区表的索引时,惟一的选择是创建整个索引:
改变指数par_ind_01 reuild分区yy05;
除此之外,您还可以在同一时间做很多事情,比如更改表空间、导出表、删除表数据等等。
数据清洗:
我们经常需要删除表的一些历史数据。一般的做法是删除,但这将导致撤消和重做信息的快速增长和数据库的整体性能:
修改表tab_a删除分区yy01;
当删除一个表的分区时,同时删除相应的本地索引。如果有全局索引,它将成为一个不可用的状态。为了避免出现这种情况,您可以使用:
修改表tab_a yy01更新全局索引分区;