Добавление последовательности в большую Oracle таблицу - PullRequest
0 голосов
/ 18 июня 2020

У меня есть запросы, которые берут существующую большую таблицу и строят из нее таблицы для составления отчетов. Проблема в том, что исходные таблицы содержат 60-80 млн + записей, и на их воссоздание уходит много времени. Я хотел бы иметь возможность определять, какие записи являются новыми, чтобы я мог создавать, просто добавляя новые записи в таблицы отчетов.

Для меня лучший способ определить это - иметь столбец идентификации. Есть ли какие-либо существенные затраты на создание этого и добавление в таблицу?

Отдельно, можно ли создать материализованное представление, которое берет данные из одной из этих таблиц, но добавляет последовательность как часть материализованного представления? То есть что-то вроде

create materialized view some_materialized_view as
select somesequence.nextval, source_table.*
from source_table?


1 Ответ

1 голос
/ 18 июня 2020

Вы можете добавить в свою таблицу столбец на основе последовательности, но, как предлагает Гэри, я бы этого не делал.

Задача, которую вы собираетесь решить, настолько распространена, что уже реализованы другие решения.

Первая встроенная опция, которая приходит на ум, - это номер изменения системы SCN, своего рода Oracle внутренние часы. По умолчанию таблицы настроены для записи SCN всего (обычно 8 КБ) блока, обычно содержащего много строк, но вы можете настроить таблицу для хранения записи SCN, изменяющей каждую строку. Затем вы можете отслеживать новые или измененные столбцы, которые не были скопированы в таблицы отчетов.

CREATE TABLE t (c1 NUMBER) ROWDEPENDENCIES;
INSERT INTO t VALUES (1);
COMMIT;
SELECT c1, ora_rowscn FROM t;

Во-вторых, я бы подумал о добавлении столбца даты. С 60-80 миллионами строк я бы не стал этого делать с ALTER TABLE xxx ADD (d DATE DEFAULT SYSDATE), но с переименованием, созданием как select, drop:

CREATE TABLE t AS SELECT * FROM all_objects;
RENAME t TO told;
CREATE TABLE t AS SELECT sysdate AS d, told.* FROM told;
ALTER TABLE t MODIFY d DATE DEFAULT SYSDATE;
DROP TABLE told;  

В-третьих, я бы прочитал материализованные представления . У меня никогда не было возможности использовать эту работу, но теоретически вы должны иметь возможность настроить журнал материализованных представлений на своем 80-метровом столе, который записывает изменения и обновляет зависимые материализованные представления.

И, наконец, я Я бы рассмотрел возможность разбиения вашей большой таблицы по (недавно введенному) столбцу даты, чтобы идентификация новых строк стала быстрее. К сожалению, это зависит от вашей версии и лицензии Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...