Disons que nous avons une table avec 6 millions d'enregistrements. Il y a 16 colonnes entières et quelques colonnes de texte. C'est une table en lecture seule, donc chaque colonne entière a un index. Chaque enregistrement avoisine 50-60 octets.Postgresql - performance de l'utilisation de tableau dans une grande base de données
Le nom de la table est "Item"
Le serveur est: 12 Go de RAM, 1,5 To de SATA, 4 CORES. Tous les serveurs pour postgres.
Il y a beaucoup plus de tables dans cette base de données afin que RAM ne couvre pas toutes les bases de données.
Je souhaite ajouter à la table "Item" une colonne "a_elements" (type tableau de grands entiers) Chaque enregistrement ne devrait pas contenir plus de 50-60 éléments dans cette colonne.
Après que je voudrais créer un index GIN sur cette colonne et requête typique devrait ressembler à ceci:
select * from item where ...... and '{5}' <@ a_elements;
Je possède également un second, option plus classique.
Ne pas ajouter a_elements colonne à l'élément de table, mais créer des éléments de table avec deux colonnes:
- id_item
- id_element
Ce tableau aurait environ 200 millions dossiers.
Je suis capable de faire du partitionnement sur ces tables afin que le nombre d'enregistrements soit réduit à 20 mln dans les éléments de table et 500 K dans l'élément de table.
La deuxième requête d'option ressemble à ceci:
select item.*
from item
left join elements on (item.id_item=elements.id_item)
where ....
and 5 = elements.id_element
Je me demande quelle option serait mieux au point de vue de la performance. Postgres peut-il utiliser plusieurs index différents avec l'index GIN (option 1) dans une seule requête?
Je dois prendre une bonne décision car l'importation de ces données me prendra 20 jours.
Salut! Et quelle est votre décision finale? J'ai presque la même situation. –