oracle分区表和分区索引和索引,Oracle分区索引
(分区p1值小于(4)表空间data0,
分区p2值小于(5)表空间data1、
.
);
适用场景
范围分区一般适用于按时间段存储数据。
优势
知道用户的具体数据属于哪个分区。
因此,通过分区可以有效地实现各种大规模的数据管理操作。
比如删除指定时间段的历史数据管理,备份和恢复指定分区,或者导入导出。
缺点
分区数据可能不均匀。
范围划分与记录值有关,实现难度和可维护性相对较差。
列表分区
示例
创建表t
(.列定义.)
按列表分区(城市)
(分区p1值( Beijing )表空间data0,
分区p2值(“上海”)表空间data1,
.
);
Range和List的区别在于前者是连续的,后者是离散的。
所以优缺点和适用场景都差不多。
这里就不赘述了
(3)散列分区
示例
创建表t
(.列的定义.)
按散列分区(customer_no)
分区8存储在
(数据0,数据1);
友情提示:Oracle建议哈希分区号一般是2的幂。
适用场景
哈希分区适用于静态数据。
什么是静态数据?
一般这类数据总是存储在数据库中,不需要进行历史数据迁移。
例如:用户资料、账户信息等。
这些信息大多是通过用户ID或账号获取的。
如果根据这些字段进行哈希分区,建立本地前缀分区索引,访问效率相当高。
优势
统一的数据分布
实现非常简单。
缺点
用户不知道一条记录会落在哪个分区。
因此,哈希分区不适合大规模的数据管理操作。
比如历史数据清理、批量数据导入导出等。
组合分区
Oracle复合分区在某种程度上是集中优势的表现。
例如,在大多数情况下,第一维按时间字段划分,
这适用于分区级别的大规模数据管理操作。
第二散列或列表可以进一步提高访问性能或降低实现难度。
仅限11g之前的版本:范围哈希或范围列表
(二)分区索引技术概述
在生产环境中,有时我们会遇到:
分区表已经做好了。为什么性能没有提升?还要慢?
原因之一是分区索引不合理,甚至根本没有设计。
让我们大致了解一下分区上的表和索引之间的关系:
(1)本地前缀分区索引
假设分区表是交易流量表T,根据交易日期进行范围划分。
如果您想在日期字段上创建索引,我们可以:
在t (date) local上创建索引idx _ t;
X _ t称为局部前缀索引。
本地索引的分区方法与对应表的分区方法相同。
所谓前缀是指分区字段作为索引字段的前缀。
优势
提高查询性能。
当一个分区被删除或合并时,Oracle会自动对相应的索引分区执行相同的操作,
整个本地前缀分区索引仍然有效,不需要重建。
这极大地保证了桌子的可用性。
局部无前缀划分索引
假设我们需要在T表的area字段建立一个分区索引,我们可以:
在t (area) local上创建索引idx _ t _ area
X _ t _ area称为局部无前缀分区索引。
如果前缀必须根据索引扫描所有分区,性能可能会降低。
但是,它可以保证索引访问的可用性。
适用场景:
如果历史数据整理非常频繁,又无法承受全局分区索引重建时间过长的索引不可用。
同时,如果日常事务性能可以接受,建议设计本地无前缀分区索引。
(3)全局分区索引
假设我们需要在T表的area字段建立一个分区索引,我们可以:
在t(area)上创建索引idx_t_g_area
按范围(区域)的全局分区
(分区p1小于.);
全局意味着索引的分区与表的分区无关。
在10g之后,Oracle提供了两种全局分区索引:
全球范围分区指数
全局散列分区索引
缺点:
主要体现在数据的高可用性。
在删除分区之后,全局分区索引都是无效的,除非它们被重新绑定。
但是数据越大,重建索引的时间就越长。