查询分区表失效的索引
select a.blevel, a.leaf_blocks, a.index_name, b.table_name, a.partition_name, a.status from user_ind_partitions a, user_indexes b where a.index_name = b.index_name and a.status = 'UNUSABLE';分区表索引失效的操作
操作动作 操作命令 是否失效(全局索引) 如何避免(全局索引) 是否失效(分区索引) 如何避免(分区索引)truncate分区 alter table part_tab_trunc truncate partition p1 ; 失效 alter table part_tab_trunc truncate partition p1 Update GLOBAL indexes; 没影响 N/A
drop分区 alter table part_tab_drop drop partition p1; 失效 alter table part_tab_drop drop partition p1 Update GLOBAL indexes; 没影响 N/A
split分区 alter table part_tab_split SPLIT PARTITION P_MAX at(30000) into (PARTITION p3,PARTITION P_MAX); 失效 alter table part_tab_split SPLIT PARTITION P_MAX at (30000) into (PARTITION p3,PARTITION P_MAX) update global indexes; 没影响 N/A
add分区 alter table part_tab_add add PARTITION p6 values less than (60000); 没影响 N/A 没影响 N/A
exchange分区 alter table part_tab_exch exchange partition p1 with table normal_tab including indexes; 失效 alter table part_tab_exch exchange partition p1 with table normal_tab including indexes update global indexes; 没影响 N/A
全局临时表:全局临时表分为两种类型,一种是基于会话的全局临时表(on commit preserve rows);一种是基于事务的全局临时表(on commit delete rows)
create global temporary table [临时表名] on commit (preserve rows)|(delete rows) as select * from [数据表];eg:
create global temporary table tmp on commit preserve rows as select * from dba_objects;全局临时表特点:
一、高效删除记录;
二、不同会话访问临时表看到的会话是不同的
select * from v$mystat where rownum=1;ps:基于事务的临时表在事务提交和会话连接退出时,临时表数据会被删除;基于会话的临时表就是在会话连接退出时,临时表数据被删除
索引组织表:
压缩技术
表压缩
ALTER TABLE t MOVE COMPRESS ;索引压缩
create index idx2_object_union on t2 (owner , object_type , object_name ); ALTER index idx2_object_union rebuild COMPRESS ;簇表:簇由一组共享多个数据块的多个表组成,它将这些表的相关行一起存储到相同数据块中,这样可以减少查询数据所需的磁盘读取量。新建簇之后,在簇中新建的表被称为簇表
ps:表结构设计时,最好存放什么数据就设计为什么类型,避免执行时类型转换,影响性能
Oracle索引知识索引由根块(Root)、茎块(Branch)、叶子块(Leaf)组成,其中叶子块主要存储索引列具体值(Key Column Value)以及能定位到数据块具体位置的Rowid,茎块和根块主要保存对应下级对应索引
索引特性:
索引本身是有序的
索引本身能存储列值
注意:
仅等值无范围查询时,组合的顺序不影晌性能
drop table t purge; create table t as select * from dba objects; update t set object_id=rownum ; commit; create index idx_id_type on t(object_id, object_type) ; create index idx_type_id on t(object_type , object_id) ; set autotrace off; alter session set statistics_level=all ; select /*+index(t idx_id_type)*/ * from t where object_id=20 and object_type='TABLE'; select * from table(dbms_xplan.display cursor(null , null , 'allstats last')); select /*+index(t,idx_type id)*/ * from t where object_id=20 and object_type= 'TABLE'; select * from table(dbms_xplan.display cursor(null , null , 'allstats last'));