Эффективно ли создать индекс после завершения загрузки данных или раньше, или это не имеет значения?Наиболее эффективный способ создания индекса в Postgres
Например, у меня есть 500 файлов для загрузки в DB Postgres 8.4. Вот два сценария создания сценариев, которые я мог бы использовать:
- Создать индекс, когда таблица создана, а затем загрузить каждый файл в таблицу; или
- Создайте индекс после того, как все файлы были загружены в таблицу.
Данные таблицы составляют около 45 гигабайт. Индекс составляет около 12 гигабайт. Я использую стандартный индекс. Она создается так:
CREATE INDEX idx_name ON table_name (column_name);
Моя загрузка данных использует COPY FROM.
После того, как все файлы будут загружены, обновления, удаления или дополнительные нагрузки не будут происходить в таблице (это ценность данных дня, которая не изменится). Поэтому я хотел спросить, какой сценарий будет наиболее эффективным? Первоначальное тестирование, по-видимому, указывает на то, что загрузка всех файлов, а затем создание индекса (сценарий 2) выполняется быстрее, но я не сделал научного сравнения двух подходов.
Ну, когда стол заблокирован, никто не может читать или писать, что может быть очень раздражающим, даже ночью. Вам лучше использовать CREATE INDEX CONCURRENTLY – mvp
@BradTilley: Я думал, что это новая функция, но PostgreSQL 8.4 [поддерживает ее] (http://www.postgresql.org/docs/8.4/static/sql-createindex.html). – mvp
"* когда таблица заблокирована, никто не может читать или писать *" - Я не думаю, что это правда. Когда выполняется 'CREATE INDEX', таблица все еще может быть прочитана, но не обновлена, если я не ошибаюсь. –