Compressão = Velocidade
Se estiver utilizando Oracle 11gR2, utilize o Advanced Compression. É um dos motivos que eu digo que qualquer aplicação fica mais rápida em 11gR2.
Há uma crença sobre Oracle a respeito de tabelas com COMPRESSION, pois o uso delas irá utilizar mais CPU. Na verdade, o algoritmo de compressão está tão otimizado, e o ganho de desempenho com elas é tão grande, que menos CPU será utilizada durante toda a execução do SQL pois a resposta total será mais rápida, compensando os ciclos gastos com a descompressão. Quanto a outros recursos, imagine somente o que a economia de DB_CACHE_SIZE lhe trará.
Veja a diferença absurda de tempos nos exemplo abaixo. Repeti 5x cada teste, pra eliminar qualquer outra variável.
[oracle@Oracle-01 ~]$ sqlplus SCOTT/TIGER
SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 9 14:12:21 2010
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
SQL> SET TIMING ON
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
7121664
Elapsed: 00:00:32.28
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:29.66
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:31.14
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:30.08
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:31.74
SQL> CREATE TABLE T2 COMPRESS AS SELECT * FROM T;
Table created.
Elapsed: 00:02:14.21
SQL> SELECT COUNT(*) FROM T2;
COUNT(*)
----------
7121664
Elapsed: 00:00:04.33
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:01.14
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:01.07
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:01.01
SQL> /
COUNT(*)
----------
7121664
Elapsed: 00:00:01.01
SQL> SELECT TO_CHAR(SUM(BYTES)) FROM DBA_SEGMENTS WHERE SEGMENT_NAME = 'T';
TO_CHAR(SUM(BYTES))
----------------------------------------
1613758464
Elapsed: 00:00:01.99
SQL> SELECT TO_CHAR(SUM(BYTES)) FROM DBA_SEGMENTS WHERE SEGMENT_NAME = 'T2';
TO_CHAR(SUM(BYTES))
----------------------------------------
243269632
Elapsed: 00:00:00.46
SQL>
Muito bom.
Vou testar, cenários com SORT.
Hugo
É uma feature paga à parte, não?
Sim, além de ser uma Feature paga a parte (US$ 11.500 por Core), só pode ser adquirida na versão Enterprise (U$$ 47.500 por Core).
Abraço !