Ключевым моментом сжатия является то, что оно работает путем удаления повторяющихся значений в каждом блоке. Таким образом, ваша тестовая таблица должна иметь репрезентативный разброс данных.
Два крайних стола ...
SQL> create table totally_similar
2 ( txt varchar2(1000) )
3 /
Table created.
SQL> insert into totally_similar
2 select rpad('a', 1000, 'a')
3 from dual connect by level <= 1000
4 /
1000 rows created.
SQL> create table totally_different
2 ( txt varchar2(1000) )
3 /
Table created.
SQL>
Прежде чем сжимать, давайте просто проверим размеры таблицы ...
SQL> insert into totally_different
2 select dbms_random.string('A',1000)
3 from dual connect by level <= 1000
4 /
1000 rows created.
SQL> select segment_name
2 , sum(bytes)
3 , sum(blocks)
4 from user_segments
5 where segment_name in ('TOTALLY_SIMILAR', 'TOTALLY_DIFFERENT')
6 group by segment_name
7 /
SEGMENT_NAME SUM(BYTES) SUM(BLOCKS)
-------------------- ---------- -----------
TOTALLY_SIMILAR 2097152 256
TOTALLY_DIFFERENT 2097152 256
SQL>
Если мы сжимаем их, мы получаем два совершенно разных результата ...
SQL> alter table totally_similar move compress
2 /
Table altered.
SQL> alter table totally_different move compress
2 /
Table altered.
SQL> select segment_name
2 , sum(bytes)
3 , sum(blocks)
4 from user_segments
5 where segment_name in ('TOTALLY_SIMILAR', 'TOTALLY_DIFFERENT')
6 group by segment_name
7 /
SEGMENT_NAME SUM(BYTES) SUM(BLOCKS)
-------------------- ---------- -----------
TOTALLY_SIMILAR 65536 8
TOTALLY_DIFFERENT 2097152 256
SQL>
Обратите внимание, что TOTALLY_SIMILAR имеет восемь блоков, хотя каждая строка была одинаковой. Поэтому вам необходимо понять распределение ваших данных, прежде чем вы сможете рассчитать степень сжатия. В документации Oracle сказано следующее:
Коэффициент сжатия, который может быть
достигнутый зависит от мощности
определенный столбец или пары столбцов
(представляющий вероятность столбца
значение повторений) и в среднем
длина строки этих столбцов. оракул
Сжатие таблицы не только сжимает
повторяющиеся значения одного столбца
но пытается использовать значение из нескольких столбцов
пары, когда это возможно.
Совет, когда дело доходит до оценки доходности, состоит в том, что выборочная таблица из 1000 блоков целевой таблицы должна дать вам достаточно хороший прогноз (хотя больше блоков дают более точный прогноз). Трудно сказать, не зная вашего размера блока, но кажется вероятным, что ваша таблица TEST намного больше, чем должна быть. Важно то, являются ли данные в тестовой таблице представительными для вашей целевой таблицы. Итак, вы создали его, используя экспорт или образец из целевой таблицы, например,
create table test_table as select * from big_table sample block (1)
/
Вам потребуется отрегулировать процент в предложении SAMPLE (), чтобы получить как минимум 1000 блоков.
редактировать
В большинстве случаев сжатие на самом деле должно ускорять извлечение данных, но YMMV. Стоимость сжатия оплачивается при вставке или обновлении данных. Сколько стоит этот налог и можете ли вы что-либо сделать, чтобы избежать его, скорее зависит от профиля вашего стола.