索引
索引:其中记录的书rowid以及可以标示堆组织表的一行,聚簇表例外
独特值
覆盖索引
B树索引:索引组织表organizationindex;
唯一索引:uniqueindex
反向键索引:reverse;
键压缩索引:compress2;
降序索引:
------------------------------------------------------索引健压缩是指从串联(多列)索引取出冗余
select*fromuser_objectswhereobject_type='INDEX';
createtabletasselect*fromall_objectswhererownum<=50000;
createindext_idxont(owner,object_type,object_name);
select*frombig_table;
ANALYZEINDEXt_idxVALIDATESTRUCTURE;
createtableidx_statsasselect'noncompressed'what, a.*fromindex_stats a;
select*fromidx_stats;
dropindext_idx;
createindext_idxont(owner,object_type,object_name)compress&1;----使用3个压缩列来创建这个索引
createindext_idxont(owner,object_type,object_name)compress&1;----使用2个压缩列来创建这个索引
createindext_idxont(owner,object_type,object_name)compress&1;----使用1个压缩列来创建这个索引
analyzeindext_idxvalidatestructure;
insertintoidx_statsselect'compress &1',a.*fromindex_stats a;
selectwhat,height,lf_blks 叶子节点块,br_blks ,btree_space可以得出索引大小,opt_cmpr_count可用的最佳压缩数,opt_cmpr_pctsave节省空间fromidx_stats ;
----------------------------------------------------------------反向健索引是指主要用于缓解忙索引右侧的缓冲区
select90101,dump(90101,16)fromdual;
begindbms_stats.gather_index_stats(user,'T',method_opt =>'for all indexed column');end;
select*fromuser_objectswhereobject_type='TABLE';
位图索引:相对较低的差异值bitmap(数据仓库环境中用的较多)
位图连接索引:表的外键列和另一个表的主键列连接时适用
主键约束:在主键列值上自动创建索引
唯一键约束:
1只读索引块
2读索引与数据块
3只读数据块
dbms_space.create_index_cost 估算索引大小
dbms_metadata.get_ddl 获取元数据
alterindexunusable/invisible
alterindexrebuild
dropindex
不可见 需要维护用来避免锁定问题或强制执行约束
不可用 优化器不用 维护不用
外键索引:主要是为了减少锁定问题
当select子句中的列都具有索引时 这种索引称为覆盖索引 只需读取索引块主键列
indexrangescan
indexfastfullscan---对count()很适用
dbblockgets+consistentgets=总的内存读
bufferispinnedcount第二次读取的块数是收集在缓冲区被钉住记数统计信息里面而不被收集进入统计信息中。
dbms_rowid.rowid_relative_fno(rowid)---rowid转换
外联 约束声明与列定义之间 用逗号 好处是可以为主键指定多列
constraintcust_pkprimarykey(cust_id);
独立索引删除与禁用 主键约束 先建unique index之后addconstraintprimarykey
listagg ?
organizationindex: 存储在b树索引结构中 在此结构中没有为每行存储物理rowid
star_transformation 星型转换
IOT(堆组织表)索引组织表:按主键的顺序存储的,所以必须有主键
----分区索引
索引的前导部分:在列清单中首先指定索引中的一个或多个列
ontablemytable(a,b,c)
前导部分为:a b abc而b c bc不是
前导部分只有少量的不同值而非前导部分有很多不同值,这个时候会选择索引跳跃扫描(逻辑子索引)
复合索引:确保where子句中使用的键组成复合索引的前导部分
global可以在分区表或则非分区表中使用
local只可以在分区表的基础上建立
表的分区在前导列:前缀索引
全局分区索引:必须有一个maxvalue必须是前缀分区索引
altertableemployees_12splitpartitionmanager_maxat(1000)into(partitionmanager_max,partitionmanager_1000);
altertablettruncate截断分区--全局unusable本地的usable
altertabletmove移动分区--全局和本地都是unusable,但是本地只是在这个分区内unusable
截断分区清除表分区内的所有数据
本地分区索引:不影响底层的索引分区
非分区索引/全局index:全部变成unusable
添加虚拟分区实现分区拆分 :虚拟一个高端值 然后在高端值后面添加一个maxvalue删除某个分区对本地索引分区没有任何影响usable
altertabletmergepartitionp1995 ,pmaxintopartitionpmaxupdateindexs;--更新之后的status会依然是usable