web-dev-qa-db-fra.com

TUNING DE PERFORMANCES: Créer un index pour la colonne booléenne

J'ai écrit un processeur Daemon qui récupérera les enregistrements d'une base de données et les insérera dans une autre base de données pour la synchronisation. Il va chercher des enregistrements basés sur chaque drapeau d'indication d'enregistrement qui est le type de données booléen.

Mes tables ont des centaines de milliers d'enregistrements. Lorsque je sélectionne l'enregistrement selon lequel sync_done est faux, cela causera-t-il des problèmes de performance de la base de données? Ou devrais-je appliquer une indexation pour cette colonne Sync_done (DataType Boolean), pour améliorer les performances, car elle appliquera une opération de sélection sur les enregistrements avec une valeur Sync_Done de FALSE?

Par exemple, disons que j'ai 10000 enregistrements. Parmi ceux-ci, 9500 ont déjà été synchronisés (Sync_done est vrai), ne sélectionnera que le reste de l'enregistrement (Sync_done est faux). En fin de compte, 9500 enregistrements ne viendraient pas sous l'opération Sélectionner.

S'il vous plaît suggérer comment je pourrais procéder.

29
Pavunkumar

Pour une requête comme celle-ci A Index partiel vous servirait mieux.

CREATE INDEX ON tbl (id) WHERE sync_done = FALSE

Cependant, pour un cas d'utilisation comme celui-ci, d'autres méthodes de synchronisation peuvent être préférables.

44
Erwin Brandstetter

Je vous suggère que vous ne pas Index Le tableau (le booléen est un champ de cardinalité faible), mais la partitionne plutôt sur la valeur booléenne.

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

18
Johan

Une table avec des records et un champ booléen devraient être le moyen de le faire.

Voici quelque chose que je crois pourrait vous aider ...

index bitmap

Alternative de l'index bitmap dans PostgreSQL

2
SiB

Un index aidera certainement, mais plutôt que de voter, ce qui peut imposer des problèmes de charge et de concurrence si votre base de données est fortement utilisée, il pourrait être utile d'être examiné une méthode de notification telle que - AMQP ou approche basée sur la file d'attente de la base de données. Slony ou SkyTools Londiste . J'ai utilisé Slony et Londiste pour la réplication basée sur la gâchette et j'ai trouvé à la fois excellent. Ma préférence est pour Londiste car il est beaucoup plus simple de configurer et de gérer (et si vous avez un cas de cas d'utilisation simple sur la plus ancienne 2. Branch).

1
Gavin