有关Oracle表分区进行(DML)维护后对索引的影响的分析
来源:互联网 发布:搬家软件哪个好 编辑:程序博客网 时间:2024/05/24 05:48
有关Oracle表分区进行(DML)维护后对索引的影响的分析
分类: 数据库 oracle 2011-07-07 13:13 210人阅读 评论(0)收藏 举报
对索引的几种情况分别进行总结:
1、如果删除分区,则会导致该表下所有的索引状态处于不可用状态(除本地前缀索引外);
2、如果重命名表,同上
3、如果truncate分区数据,同上;
4、重命名分区,不会对索引产生任何影响。
解释:
对于分区表,索引有以下几种方式:
1、普通索引,与分区无关,就是平常的索引;
2、全局分区索引,独立于分区的索引,按照独立的分区方式分区。按照网上介绍的和个人的实践,
这个方式查询效率不高;
3、本地前缀分区索引,即基于分区表的字段进行的分区,创建方式很简单,在普通索引建立的语句后面加个local即可,
效率相对于普通索引高一点;
4、本地非前缀分区索引,即非基于分区表的分区字段,除非是特殊情况,这种方式效率较低,不推荐使用。
当索引处于不可用状态时,数据将不能插入,会提示:ora-01502:state unusuable。
且这种情下,只要表中有一个索引处于不可用状态,都会使表处于不可插入状态。
可以修改参数来实现这种情况下的数据插入问题:alter session set skip_unusable_indexes=true;
但是有种情况除外,当有存在唯一主键索引时,数据依然不能插入。
而且主键索引也不能drop,因此想通过删除主键索引再修改参数来实现数据的可插入是不可实现的。
因此这种情况下(索引状态处于不可用状态时)较好的办法是,先删除要进行本地索引分区的索引(此时尚未进行本地分区),
创建本地分区索引后,再drop表分区,这样的好处是本来drop分区后需要重建n+1个索引,
现在只要重建n个索引,这样的话就省去了重建这个索引的时间了。
对于本地分区前缀索引,删除分区只会对所在分区的部分产生影响,对于其他的部分则仍然是正常状态的。
另:修改参数只能对于当前session所在的用户有效,对于其他session,如果没有设置该条件,数据还是处于不可插入状态的。
以上情况,需要在实际的应用中充分考虑到这些问题才能最大的减少所带来的数据丢失。
重命名分区不会对索引状态产生影响。
注:
1、如何删除分区
alter table [table_name] drop partition [partition_name];
2、如何删除与创建本地分区索引
删除:drop index [index_name];
创建:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];
注意:
当在大表上建立索引时,使用NOLOGGING选项可以最小化重做记录.使用NOLOGGING选项有以下优点.
节省重做日志空间
降低索引建立实际
提高索引并行建立的性能.
但是nologging参数不建议在部署了dataguard的情况下使用,因为dataguard是基于归档日志来进行远程备份的。
3、如何重建索引:
alter index [index_name] rebuild [parallel {number}] [nologging/loggin];
4、如何创建分区:
--范围分区
create table [table_name] partition by range([col_name])(
partition [part_name] values less than [range_value] tablespace [tablespace_name],
...
)
--列表分区
--hash分区
5、如何截断分区:
alter table [table_name] truncate partition [partition_name];
1、如果删除分区,则会导致该表下所有的索引状态处于不可用状态(除本地前缀索引外);
2、如果重命名表,同上
3、如果truncate分区数据,同上;
4、重命名分区,不会对索引产生任何影响。
解释:
对于分区表,索引有以下几种方式:
1、普通索引,与分区无关,就是平常的索引;
2、全局分区索引,独立于分区的索引,按照独立的分区方式分区。按照网上介绍的和个人的实践,
这个方式查询效率不高;
3、本地前缀分区索引,即基于分区表的字段进行的分区,创建方式很简单,在普通索引建立的语句后面加个local即可,
效率相对于普通索引高一点;
4、本地非前缀分区索引,即非基于分区表的分区字段,除非是特殊情况,这种方式效率较低,不推荐使用。
当索引处于不可用状态时,数据将不能插入,会提示:ora-01502:state unusuable。
且这种情下,只要表中有一个索引处于不可用状态,都会使表处于不可插入状态。
可以修改参数来实现这种情况下的数据插入问题:alter session set skip_unusable_indexes=true;
但是有种情况除外,当有存在唯一主键索引时,数据依然不能插入。
而且主键索引也不能drop,因此想通过删除主键索引再修改参数来实现数据的可插入是不可实现的。
因此这种情况下(索引状态处于不可用状态时)较好的办法是,先删除要进行本地索引分区的索引(此时尚未进行本地分区),
创建本地分区索引后,再drop表分区,这样的好处是本来drop分区后需要重建n+1个索引,
现在只要重建n个索引,这样的话就省去了重建这个索引的时间了。
对于本地分区前缀索引,删除分区只会对所在分区的部分产生影响,对于其他的部分则仍然是正常状态的。
另:修改参数只能对于当前session所在的用户有效,对于其他session,如果没有设置该条件,数据还是处于不可插入状态的。
以上情况,需要在实际的应用中充分考虑到这些问题才能最大的减少所带来的数据丢失。
重命名分区不会对索引状态产生影响。
注:
1、如何删除分区
alter table [table_name] drop partition [partition_name];
2、如何删除与创建本地分区索引
删除:drop index [index_name];
创建:create index [index_name] on [table_name]([index_column]) tablespace [tablespace_name] local [nologging/logging];
注意:
当在大表上建立索引时,使用NOLOGGING选项可以最小化重做记录.使用NOLOGGING选项有以下优点.
节省重做日志空间
降低索引建立实际
提高索引并行建立的性能.
但是nologging参数不建议在部署了dataguard的情况下使用,因为dataguard是基于归档日志来进行远程备份的。
3、如何重建索引:
alter index [index_name] rebuild [parallel {number}] [nologging/loggin];
4、如何创建分区:
--范围分区
create table [table_name] partition by range([col_name])(
partition [part_name] values less than [range_value] tablespace [tablespace_name],
...
)
--列表分区
--hash分区
5、如何截断分区:
alter table [table_name] truncate partition [partition_name];
延伸:truncate一个表或一个分区,能使HWM重至为0,而delete则不能。
6、如何重命名分区:
alter table [table_name] rename partition [old_name] to [new_name];
7、如何查询索引状态:
select ind.table_name, ind.index_name, ind.status
from user_indexes ind
where ind.index_name = '[index_name]'
and ind.table_name = '[table_name]'
8、如何添加分区:
alter table [table_name] add partition [partition_name] values less than([range_value]).
- 有关Oracle表分区进行(DML)维护后对索引的影响的分析
- 有关Oracle表分区进行(DML)维护后对索引的影响的分析
- 有关Oracle表分区进行(DML)维护后对索引的影响的分析
- 经常DML操作对索引的影响
- DML对innodb索引的影响
- DML操作对索引的影响
- 索引的默认结构及对dml影响
- sql server DML操作对索引的影响
- DML对undo的影响
- 对表进行dml操作时影响产生日志量的几个因素
- 测试分区维护对于字段索引的影响(包括本地/全局索引分区与普通分区)
- Atitit.分区对索引的影响 分区索引和全局索引 attilax总结
- 深入研究B树索引-DML对B树索引的影响
- Oracle数据库对表或索引的分区
- Oracle 索引的维护
- Oracle 索引的维护
- Oracle 索引的维护
- Oracle 索引的维护
- CUDA C的并行编程
- 那年,那场青春繁华梦
- 检验IP地址有效性
- 腾讯电面
- Python发送Email
- 有关Oracle表分区进行(DML)维护后对索引的影响的分析
- Android应用开发揭秘(笔记) 第三章 程序设计基础
- Android开发如何利用Google Maps
- Ini文件读取类,采用C++ STL实现
- 上传文件至服务器中的路径问题
- Android权限集合(转)
- windows ssh客户端putty 简介
- 有喷子在喷JAVA,拿来洗下身子。
- csdn分析