oracle表的分区本地索引以及全局索引
来源:互联网 发布:电子相册制作软件 知乎 编辑:程序博客网 时间:2024/05/29 19:10
oracle是甲骨文公司出品的一个大型的关系型数据库,提供了非常多的操作数据的函数,在我们日常开发中,当一个表的数据量非常大时,比如日志表,表的操作性能会越来越低,并且需要更好的维护新老数据时,这时我们会对表进行分区,以便更好的解决问题
一、分区表的创建形式有以下几种
1、分区表关键字:
PARTITION 分区
RANGE 范围
LIST 列表
HASH 哈希
INTERVAL 自动扩展分区
SUBPARTITION 子分区
2、建表语句以及分区类型
CREATETABLEtableName
(
DATE_ID NUMBER(8),
HOUR_ID NUMBER(2),
STATUS VARCHAR2(1),
DATA_TIME DATEDEFAULT SYSDATE
)
--按时间分区,每天自动创建一个分区 'day'表示每天 ‘mouth’表示每月 NUMTODSINTERVAL 是一个时间函数
PARTITIONBY RANGE (DATA_TIME)INTERVAL(NUMTODSINTERVAL(1,'day'))
(
PARTITION P20170501_LSVALUES LESSTHAN (TO_DATE('2017-05-01','YYYY-MM-DD'))TABLESPACE USERS
);
--创建列表分区,选择字段值少的字段进行分区,表结构不变
PARTITIONBY LIST (STATUS)
(
PARTITION p_0VALUES('0')TABLESPACEUSERS,
PARTITION p_1VALUES('1')TABLESPACEUSERS
);
--创建hash分区,根据hash算法,在没有哪个列字段条件合适情况下
PARTITIONBY HASH (DATE_ID)PARTITIONS4 --分为4个区
或者是
PARTITIONBY HASH (DATE_ID)
(
PARTITION p_0TABLESPACE USERS,
PARTITION p_1TABLESPACE USERS
);
--创建范围分区下带列表子分区
partitionby range(SALES_DATE) SUBPARTITION BY list (STATUS)
(
PARTITION P1VALUES LESSTHAN(TO_DATE('2017-05-01','YYYY-MMDD'))TABLESPACEUSERS
(
subpartition P1SUB1 VALUES('0')TABLESPACE USERS,
subpartitionP1SUB2 VALUES ('1') TABLESPACE USERS
)
);
二、 表分区的删除以及子分区的删除
ALTERTABLE tableName dropPARTITION partitionName;
ALTERTABLE tableName dropsubpartition subpartitionName;
三、分区本地索引以及全局索引
1)、分区表本地索引(有前缀索引即、无前缀索引)
CREATEINDEX IX_USER_NAME ON tableName(列名1) LOCAL;
说明:
A、分区表指定了分区名进行查询时,条件中没有索引列也是在这个指定分区内进行查找
B、分区表在不指定分区名进行查询时,条件中没有索引的话将进行全表扫描,有索引的话为各个分区内索引扫描
C、分区表不指定分区名进行查询时,条件中有分区键,无索引时,也是在单个分区内进行查找,有索引则在单个分区内索引查找
D、分区表不指定分区名进行查询时,条件中有分区键,并且为索引时,是在单个分区内索引查找
本地索引特点:
1. 本地索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,本地索引的分区机制和表的分区机制一样。
2. 如果本地索引的索引列以分区键开头,则称为前缀局部索引。
3. 如果本地索引的列不是以分区键开头,或者不包含分区键列,则称为非前缀索引。
4. 前缀和非前缀索引都可以支持索引分区消除,前提是查询的条件中包含索引分区键。
5. 本地索引只支持分区内的唯一性,无法支持表上的唯一性,因此如果要用本地索引去给表做唯一性约束,则约束中必须要包括分区键列。
6. 本地分区索引是对单个分区的,每个分区索引只指向一个表分区,全局索引则不然,一个分区索引能指向n个表分区,同时,一个表分区,也可能指向n个索引分区,对分区表中的某个分区做truncate或者move,shrink等,可能会影响到n个全局索引分区,正因为这点,本地分区索引具有更高的可用性。
7. 位图索引只能为本地分区索引。
8. 本地索引多应用于数据仓库环境中。
2). 分区表全局索引
CREATEINDEX I_ID_GLOBAL ON TEST(ID) GLOBAL
全局索引特点:
1.全局索引的分区键和分区数和表的分区键和分区数可能都不相同,表和全局索引的分区机制不一样。
2.全局索引可以分区,也可以是不分区索引,全局索引必须是前缀索引,即全局索引的索引列必须是以索引分区键作为其前几列。
3.全局分区索引的索引条目可能指向若干个分区,因此,对于全局分区索引,即使只截断一个分区中的数据,都需要rebulid若干个分区甚至是整个索引。
4.全局索引多应用于oltp系统中。
5.全局分区索引只按范围或者散列hash分区,hash分区是10g以后才支持。
6.oracle9i以后对分区表做move或者truncate的时可以用updateglobal indexes语句来同步更新全局分区索引,用消耗一定资源来换取高度的可用性。
7.表用a列作分区,索引用b做局部分区索引,若where条件中用b来查询,那么oracle会扫描所有的表和索引的分区,成本会比分区更高,此时可以考虑用b做全局分区索引。
全局索引:与本地分区索引不同的是,全局分区索引的分区机制与表的分区机制不一样。全局分区索引全局分区索引只能是B树索引,到目前为止(10gR2),oracle只支持有前缀的全局索引。
另外oracle不会自动的维护全局分区索引,当我们在对表的分区做修改之后,如果执行修改的语句不加上updateglobal indexes的话,那么索引将不可用
- oracle表的分区本地索引以及全局索引
- Oracle分区索引-本地索引和全局索引比较
- Oracle分区索引--本地索引和全局索引比较
- Oracle分区索引--本地索引和全局索引比较
- Oracle分区索引--本地索引和全局索引比较
- oracle本地索引分区、全局索引分区…
- ORACLE全局索引、分区索引
- 全局索引与本地分区索引的一个重要区别
- 全局分区索引和本地索引示例
- PLSQL,Oracle 测试 ,创建局部分区索引,全局未分区索引 ,全局分区索引,以及失效重建
- oracle的分区表、分区索引和全局索引部分总结
- oracle的分区表、分区索引和全局索引部分总结
- oracle的分区表、分区索引和全局索引部分总结
- Oracle创建全局分区索引
- Oracle本地分区索引的使用小结
- Oracle本地分区索引的使用小结
- 分区索引--本地索引和全局索引比较
- 分区索引--本地索引和全局索引比较
- 生成图标
- CentOS下安装Redis
- 淘宝笔试题:一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL
- adb进程被占用
- springMVC 实现的增删查(没有数据库,用session代替)
- oracle表的分区本地索引以及全局索引
- openGl oom的解决方法
- 第8次C练习
- Fiddler抓取手机HTTP/HTTPS请求(3)
- Java NIO 随笔
- mysql group by获取第一组数据
- AltCoin
- linux解压、解压缩文件
- 使用li标签布局