Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Для такого запроса partial index будет вам лучше всего.

CREATE INDEX ON tbl (id) WHERE sync_done = FALSE

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

Ответ 2

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

Смотрите: http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html

Ответ 4

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