SQL> create user test100 identified by test100 ;
User created.
SQL> grant dba to test100;
Grant succeeded.
ALL_IND_PARTITIONS 描述,对于每个index 分区访问到当前用户, 分区级别分区信息, 分区的存储参数
相关的视图:
DBA_IND_PARTITIONS 描述所有的index 分区在数据库
INDEX_OWNER 索引所有者
INDEX_NAME 索引名字
PARTITION_NAME 分区名字
drop table T48_TRANSACTION_MODEL;
create table T48_TRANSACTION_MODEL
(
trandate DATE,
orgid VARCHAR2(11),
stan NUMBER,
subjectno VARCHAR2(10),
subjectname VARCHAR2(50),
acctid NUMBER
)
partition by range (TRANDATE)
(
partition XYZ_20100000 values less than (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110101 values less than (TO_DATE(' 2011-01-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110102 values less than (TO_DATE(' 2011-01-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110103 values less than (TO_DATE(' 2011-01-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110104 values less than (TO_DATE(' 2011-01-05 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110105 values less than (TO_DATE(' 2011-01-06 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110106 values less than (TO_DATE(' 2011-01-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition XYZ_20110107 values less than (TO_DATE(' 2011-01-08 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'))
);
SQL> select * from dba_ind_partitions where index_owner='TEST100';
no rows selected
create index T48_TRANSACTION_MODEL_IDX1 on T48_TRANSACTION_MODEL(stan) local;
create index T48_TRANSACTION_MODEL_IDX2 on T48_TRANSACTION_MODEL(acctid) ;
SQL> select index_owner,index_name,partition_name from dba_ind_partitions where index_owner='TEST100';
INDEX_OWNER INDEX_NAME PARTITION_NAME
------------------------------ ------------------------------ ------------------------------
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110107
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110106
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110105
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110104
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110103
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110102
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20110101
TEST100 T48_TRANSACTION_MODEL_IDX1 XYZ_20100000
8 rows selected.
查看是否是分区索引:
SQL> select owner,index_name,index_type,table_owner,table_name,table_type,partitioned from dba_indexes where owner='TEST100';
OWNER INDEX_NAME INDEX_TYPE TABLE_OWNER TABLE_NAME TABLE_TYPE PAR
------------------------------ ------------------------------ ---------- ------------------------------ ------------------------------ ----------- ---
TEST100 T48_TRANSACTION_MODEL_IDX2 NORMAL TEST100 T48_TRANSACTION_MODEL TABLE NO
TEST100 T48_TRANSACTION_MODEL_IDX1 NORMAL TEST100 T48_TRANSACTION_MODEL TABLE YES
partitioned 表明是否索引是分区的(YES) 否则是(NO)
我举个 global 索引的例子
查询 条件 不走 分区键这个值
但是 我走另外一个where条件
而且选择性很高
就是where 条件里带上了分区键,对应的列 就用LOCAL
索引高度为3
不跨越分区 扫描3个block +1个 data block
跨越分区 扫描 1000个 分区 *3 +1个data block
扫描要跨越 多个 分区你就建立 global
条件里不带上了分区键对应的列,对应的列就用GLOBAL
oracle会对主键自动创建全局索引
我 有一个查询
查询 条件 不走 分区键这个值
但是 我走另外一个where条件
总结就是
扫描要跨越 多个 分区
你就建立 global
global 索引是为了解决 跨越 分区扫描的用的
分区 键
一般情况下 都已经定位到 单独的分区了
你再去建立 对该列的索引 其实 是毫无意思的
总结:
全局索引:
优点:通过索引检索,没有限定分区的谓词、或跨分区时,性能好点,
缺点:分区维护的时候麻烦,drop分区等维护会失效,dml的时候索引维护成本高,数据大了rebuild也难
local 索引:
优点:通过索引检索,有限定分区的谓词、不跨分区时,性能好,分区维护容易,dml的索引维护底,rebuild也方便。
缺点:通过索引检索,又没有限定分区的谓词、或跨分区时,性能不如全局索引
有分区裁剪的,那么其他列就建立分区索引
没有分区裁剪的,那么列就建立global 索引