关于本地分区索引和索引组织表保证唯一性的限制

简介: 首先说明索引组织表和本地分区唯一索引有着共同的特点。 1、索引组织表(以下简称IOT)要求主键是必须的因为表的结构会按照主键索引进行构造,如果IOT分区那么,那么可以理解为一个类似的按照某个字段分区的    本地索引,因为索引和表是在一起的,表的分区必然就是索引的分。



首先说明索引组织表和本地分区唯一索引有着共同的特点。
1、索引组织表(以下简称IOT)要求主键是必须的因为表的结构会按照主键索引进行构造,如果IOT分区那么,那么可以理解为一个类似的按照某个字段分区的
   本地索引,因为索引和表是在一起的,表的分区必然就是索引的分。而这个分区字段必须要是主键的一部分。考虑一个主键(name,time),如果分区键
   为TIME,如果范围是10-16 00:00:00到10-17 00:00:00 如果我们能够保证在这个范围内name time的唯一那么在整个主键内必然唯一。如果我们使用其他
   字段比如一个额外的ID字段分区,那么要保证主键的name time的唯一性只能全部扫描整个分区,这样分区的剪裁的特性就消耗殆尽了。
2、一样的本地分区索引来保证唯一性也是这样的,他必须包含分区键,这样才能做到在分区内唯一则唯一。


那么我们大概用语言描述一下:
如果IOT表分区 -> 那么分区键必须是主键的一部分


如果本地分区索引唯一 -> 那么其索引字段必须包含分区键




   
   
考虑如下几个报错
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index
ORA-14188: sub-partitioning columns must form a subset of key columns of a UNIQUE index
这两个报错则是由于本地唯一索引不包含分区键或者子分区键的报错。
如下:
SQL>  create unique index t12_u on t12(name) local;
create unique index t12_u on t12(name) local
ORA-14039: partitioning columns must form a subset of key columns of a UNIQUE index


SQL>  create unique index t12_u on t12(name,c_time) local;
create unique index t12_u on t12(name,c_time) local
ORA-14188: sub-partitioning columns must form a subset of key columns of a UNIQUE index






ORA-25199: partitioning key of a index-organized table must be a subset of the primary key
这个报错则是说明IOT的分区表,分区键必须是其组织主键的一部分。


如下:
CREATE TABLE t12(c_time date,id int,name varchar2(20),primary key(name))
ORGANIZATION INDEX
PARTITION BY RANGE(c_time)
(
 PARTITION  p1 VALUES LESS THAN (TO_DATE('01-06-2012','dd-MM-yyyy')),
 PARTITION  p2 VALUES LESS THAN (TO_DATE('01-07-2015','dd-MM-yyyy')),
 PARTITION  p3 VALUES LESS THAN (TO_DATE('01-08-2017','dd-MM-yyyy')),
 PARTITION  p4 VALUES LESS THAN (TO_DATE('01-09-2019','dd-MM-yyyy'))
 )
ORA-25199: partitioning key of a index-organized table must be a subset of the primary key




最后索引组织表不能包含子分区


ORA-25198: only range, list, and hash partitioning are supported for index-organized table


如下:
CREATE TABLE t12(c_time date,id int,name varchar2(20),primary key(name))
ORGANIZATION INDEX
PARTITION BY RANGE(c_time)
SUBPARTITION BY hash(id)
SUBPARTITION TEMPLATE
( SUBPARTITION h_p1,
  SUBPARTITION h_p2,
  SUBPARTITION h_p3,
  SUBPARTITION h_p4
)
(
 PARTITION  p1 VALUES LESS THAN (TO_DATE('01-06-2012','dd-MM-yyyy')),
 PARTITION  p2 VALUES LESS THAN (TO_DATE('01-07-2015','dd-MM-yyyy')),
 PARTITION  p3 VALUES LESS THAN (TO_DATE('01-08-2017','dd-MM-yyyy')),
 PARTITION  p4 VALUES LESS THAN (TO_DATE('01-09-2019','dd-MM-yyyy'))
 )
ORA-25198: only range, list, and hash partitioning are supported for index-organized table
相关文章
|
3月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
135 1
|
4月前
|
SQL 索引
加唯一索引时候发现已有重复数据删除
加唯一索引时候发现已有重复数据删除
23 1
|
6月前
|
SQL 存储 分布式数据库
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
64 0
|
存储 SQL 关系型数据库
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
220 1
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
|
数据库 索引
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
设计数据库唯一索引时,经常会碰到唯一删除的键值,导致很难处理,这里就简单介绍一种巧办法,帮你快速解决该问题
1740 0
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
|
存储 关系型数据库 MySQL
设计表的时候,对于自增列做物理主键使用的一点思考
原文:设计表的时候,对于自增列做物理主键使用的一点思考   本文出处:http://www.cnblogs.com/wy123/p/7581380.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)     关于自增列 自增列作为数据库的一个特性之一,在MSSQL和MySQL以及Oracle中都被支持。
1974 0
|
SQL 关系型数据库 索引
|
Go 索引
维护索引——通过重组索引提高性能
原文:维护索引——通过重组索引提高性能 前言: 如果碎片程度小于30%,建议使用重组而不是重建。因为重组不会锁住数据页或者数据表,并且降低CPU的资源。 总得来说,重组会清空当前的B-TREE,特别是索引的叶子节点,重组数据页和消除碎片。
1049 0
|
存储 关系型数据库 索引
索引组织表
说明聚集索引及索引组织表的关系及使用场景,优势。
2255 0