compress1 只压缩索引列的第一列
compress2 压缩两列,看看压缩两列和一列在使用空间上有多大区别
SQL> drop index t_idx_2 ;
索引已删除。
SQL> create index t_idx_2 on t(owner,object_type,object_name) compress 2;
索引已创建。
SQL> exec show_space('T_IDX_2',USER,'INDEX');
PL/SQL 过程已成功完成。
SQL> set serveroutput on;
SQL> exec show_space('T_IDX_2',USER,'INDEX');
Free Blocks.............................0
Total Blocks............................384
Total Bytes.............................3145728
Unused Blocks...........................24
Unused Bytes............................196608
Last Used Ext FileId....................6
Last Used Ext BlockId...................1792
Last Used Block.........................104
PL/SQL 过程已成功完成。
显然空间减少大约20%多。他是根据数据重复的多少去压缩。那么压缩在空间上的确少, 但在其他性能方面肯定有影响,因为压缩索引在算法上更加复杂。那么在查询上和维护索引上,都会花费更多的处理时间。压缩索引可以减少IO的处理时间。如果系统受CPU限制,使用压缩索引降低处理速度,如果是IO方面的限制,使用压缩索引可以提高速度
4. 反向码索引 --------为了降低在Oracle 并行服务器环境中索引叶块的竞争
1.反向码索引只是反转索引码中每列的字节。
SQL> select 90101, dump(90101,16) from dual
2 union all
3 select 90102,dump(90102,16) from dual
4 union all
5 select 90013,dump(90103,16) from dual;
90101 DUMP(90101,16)
---------- ---------------------
90101 Typ=2 Len=4: c3,a,2,2
90102 Typ=2 Len=4: c3,a,2,3
90013 Typ=2 Len=4: c3,a,2,4
只有最后一个字节是不同的。在索引结构中,这些数字是以右边互相连接结束。我们反转
1 select 90101, dump(reverse('90101'),16) from dual
2 union all
3 select 90102,dump(reverse('90102'),16) from dual
4 union all
5* select 90013,dump(reverse('90103'),16) from dual
SQL> /
90101 DUMP(REVERSE('90101'),16)
---------- ----------------------------
90101 Typ=96 Len=5: 31,30,31,30,39
90102 Typ=96 Len=5: 32,30,31,30,39
90013 Typ=96 Len=5: 33,30,31,30,39
可见块之间的距离相离的很远,这将减少同一块(最左边的块)后面的实例数,并且降低Pinging的数量。
反向码索引不是在所有列上都可以使用,例如,where x>5 就不能使用,因为索引中的数据不能分类,因此区域索引扫描不能工作
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7551038/viewspace-617542/
,如需转载,请注明出处,否则将追究法律责任。