Настройка производительности: создание индекса для логического столбца
Я написал демонический процессор, который будет извлекать записи из одной базы данных и вставлять их в другую базу данных для синхронизации. Он будет извлекать записи на основе каждого флага индикации записи, который является булевым типом данных.
В моих таблицах сотни тысяч записей. Когда я выбираю Запись, Какой бы sync_done ни был false, это вызовет какие-либо проблемы с производительностью базы данных? Или я должен применить индексирование для этого столбца sync_done (логический тип данных), чтобы улучшить производительность, поскольку он будет применять операцию select к записям со значением sync_done false?
Например, скажем, у меня есть 10000 записей. Из них 9500 уже синхронизированы (sync_done-true), будут выбраны только остальные записи (sync_done-false). В конечном счете 9500 записей не попадут под действие select.
Пожалуйста, предложите, как я мог бы действовать.
4 ответа:
Для такого запроса лучше всего подойдет частичный индекс .
CREATE INDEX ON tbl (id) WHERE sync_done = FALSE
Однако для такого случая использования предпочтительны другие методы синхронизации.
- взгляните на
LISTEN
/NOTIFY
.- или используйте триггер в сочетании с dblink .
- или один из многих доступных методов репликации.
Я предлагаю, чтобы вы не индексировали таблицу (булево поле-это поле низкой мощности), а разбили ее на булево значение.
См.: http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html
Таблица с записями и логическим полем должна быть способом сделать это.
Вот кое-что, что, как я полагаю, может вам помочь...
Индекс, безусловно, поможет, но вместо опроса, который может вызвать проблемы с нагрузкой и параллелизмом, если ваша база данных интенсивно используется, возможно, стоит рассмотреть метод уведомления, такой как amqp или триггер/очередь базы данных, основанный на подходе, таком как Slony или Skytools Londiste. Я использовал Slony и Londiste для репликации на основе триггеров и нашел их превосходными. Я предпочитаю Londiste, так как его гораздо проще настроить и управлять (и если вы есть простой случай использования придерживаться старых 2. ветка).