1
votes

Quand dois-je diviser ma table pour une recherche plus rapide?

J'ai une table Postgres avec 500k lignes qui ne sont lues que (beaucoup, par plusieurs utilisateurs). Je me demandais si diviser la base de données en deux par, disons "date de naissance" des lignes, serait plus efficace.

J'ai la moitié du tableau qui sera beaucoup plus interrogé (date de naissance> 40). Donc, le diviser par date de naissance me permettrait de vérifier directement dans un sous-ensemble plus petit (en vérifiant simplement si mon élément est> 40). Cette méthode améliore-t-elle quelque chose?


2 commentaires

Je suppose que vous voulez dire une «table», pas une base de données (une base de données contient plusieurs tables). Vous n'avez probablement besoin que d'un index pour prendre en charge vos requêtes. Diviser une si petite table ne sera pas nécessaire.


édité! mon mauvais merci! À quel moment ces mécanismes deviennent-ils pertinents?


3 Réponses :


2
votes

Un index résout votre problème. Diviser une table en stockant différentes sections de celle-ci ne fait que compliquer les choses.


0 commentaires

1
votes

SiWM a raison. Ne divisez pas votre table, d'autant plus que 500k n'est pas vraiment un grand nombre par rapport à la norme actuelle. En plus de la suggestion de SiWM, je vous recommande de vérifier quelles colonnes se trouvent dans la clause WHERE lorsque la table est interrogée et de vous assurer qu'elles sont indexées.


2 commentaires

Je comprends, mais il semble qu'à un moment donné, cela pourrait être une solution potentielle? À quelle taille dois-je commencer à penser à de telles choses et quelle est la théorie derrière cela? mise à l'échelle de SELECT en fonction de N?


Le point où ce serait une solution potentielle est le point où vous devriez quand même passer à un framework Big Data, tel qu'Apache Spark / Hadoop. D'après mon expérience personnelle, le point de rupture se situe autour de centaines de millions de lignes. La rangée de 500k est loin d'être proche. Ne pensez même pas à diviser manuellement les tables avant d'essayer postgresql.org/docs/ current / ddl-partitioning.html et ceci



1
votes

Vous pouvez également regrouper la table en utilisant l'index principal utilisé (avec une tâche cron), en particulier si vous devez renvoyer plusieurs lignes à partir d'une seule requête.

https://www.postgresql.org/docs/9.1/sql-cluster.html

Initial configuration:

    CLUSTER table_name 

Re-cluster:

    CLUSTER [VERBOSE] table_name [ USING index_name ]


0 commentaires