У меня есть таблица с большим количеством столбцов и нескольких миллионов строк, какуточненного словаря различных значений для столбца
CREATE TABLE foo (
id integer,
thing1 text,
thing2 text,
...
stuff text);
Как я могу управлять уместностью словаря уникальных значений stuff
столбца, который первоначально заполняющими как это:
INSERT INTO stuff_dict SELECT DISTINCT stuff from foo;
Должен ли я вручную синхронизировать (проверить, если новое значение stuff
уже в stuff_dict
перед каждой вставки/обновления) или использовать триггеры для каждой вставки/обновления/удаления из foo
таблицы. В последнем случае, каков наилучший дизайн для такого триггера (ов)?
UPDATE: вид здесь не подходит, потому что SELECT * FROM stuff_dict
должен работать как можно быстрее (даже CREATE INDEX ON foo(stuff)
не помогает, когда foo имеет десятки миллионов записей).
Несмотря на свое название 'обновления материализованных представлений concurrently' будет блокировать выполнение до тех пор, пока не будет закончена (только чтение других сеансов не будет заблокировано до завершения обновления). Это на самом деле медленнее, чем без «одновременного» на больших наборах данных. - Но да, материализованные представления создаются для случая использования OP. – pozs
@pozs - К сожалению, мне никогда не приходилось использовать этот вариант на практике. Этот термин действительно вводит в заблуждение. Спасибо за исправление. – klin