Как говорят другие ответы, хранилище, используемое столбцом VARCHAR2
, равно VAR ying. Чтобы получить оценку фактической суммы, вы можете использовать
1) Словарь данных
SELECT column_name, avg_col_len, last_analyzed
FROM ALL_TAB_COL_STATISTICS
WHERE owner = 'MY_SCHEMA'
AND table_name = 'MY_TABLE'
AND column_name = 'MY_COLUMN';
Результат avg_col_len
- средняя длина столбца. Умножьте его на число строк 25328687, и вы получите приблизительную оценку количества байтов, используемых в этом столбце. (Если last_analyzed
НЕДЕЙСТВИТЕЛЕН или очень стар по сравнению с последним изменением больших данных, вам придется обновить статистику оптимизатора сначала DBMS_STATS.GATHER_TABLE_STATS('MY_SCHEMA','MY_TABLE')
.
2) Посчитайте себя в образце
SELECT sum(s), count(*), avg(s), stddev(s)
FROM (
SELECT vsize(my_column) as s
FROM my_schema.my_table SAMPLE (0.1)
);
Это вычисляет размер хранилища для 0,1-процентной выборки вашей таблицы.
3) Чтобы знать наверняка, я бы проверил с подмножеством данных
CREATE TABLE my_test TABLESPACE my_scratch_tablespace NOLOGGING AS
SELECT * FROM my_schema.my_table SAMPLE (0.1);
-- get the size of the test table in megabytes
SELECT round(bytes/1024/1024) as mb
FROM dba_segments WHERE owner='MY_SCHEMA' AND segment_name='MY_TABLE';
-- now drop the column
ALTER TABLE my_test DROP (my_column);
-- and measure again
SELECT round(bytes/1024/1024) as mb
FROM dba_segments WHERE owner='MY_SCHEMA' AND segment_name='MY_TABLE';
-- check how much space will be freed up
ALTER TABLE my_test MOVE;
SELECT round(bytes/1024/1024) as mb
FROM dba_segments WHERE owner='MY_SCHEMA' AND segment_name='MY_TABLE';
Вы можете улучшить тест, используя те же уровни PCTFREE
и COMPRESSION
в своей тестовой таблице.