Настройка производительности: создание индекса для логического столбца


Я написал демонический процессор, который будет извлекать записи из одной базы данных и вставлять их в другую базу данных для синхронизации. Он будет извлекать записи на основе каждого флага индикации записи, который является булевым типом данных.

В моих таблицах сотни тысяч записей. Когда я выбираю Запись, Какой бы sync_done ни был false, это вызовет какие-либо проблемы с производительностью базы данных? Или я должен применить индексирование для этого столбца sync_done (логический тип данных), чтобы улучшить производительность, поскольку он будет применять операцию select к записям со значением sync_done false?

Например, скажем, у меня есть 10000 записей. Из них 9500 уже синхронизированы (sync_done-true), будут выбраны только остальные записи (sync_done-false). В конечном счете 9500 записей не попадут под действие select.

Пожалуйста, предложите, как я мог бы действовать.

4 26

4 ответа:

Для такого запроса лучше всего подойдет частичный индекс .

CREATE INDEX ON tbl (id) WHERE sync_done = FALSE

Однако для такого случая использования предпочтительны другие методы синхронизации.

Я предлагаю, чтобы вы не индексировали таблицу (булево поле-это поле низкой мощности), а разбили ее на булево значение.

См.: http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html

Таблица с записями и логическим полем должна быть способом сделать это.

Вот кое-что, что, как я полагаю, может вам помочь...

Растровый Индекс

Альтернатива растрового индекса в PostgreSQL

Индекс, безусловно, поможет, но вместо опроса, который может вызвать проблемы с нагрузкой и параллелизмом, если ваша база данных интенсивно используется, возможно, стоит рассмотреть метод уведомления, такой как amqp или триггер/очередь базы данных, основанный на подходе, таком как Slony или Skytools Londiste. Я использовал Slony и Londiste для репликации на основе триггеров и нашел их превосходными. Я предпочитаю Londiste, так как его гораздо проще настроить и управлять (и если вы есть простой случай использования придерживаться старых 2. ветка).