2008-12-08 4 views
9

Quelle conception pensez-vous qui s'exécute plus rapidement sur PostgreSQL?Dans PostgreSQL, est-il plus rapide d'inclure des colonnes TEXT dans la même table plutôt qu'une table séparée?

  1. Faire une table de colonne 15 de varchars et similaires, mais de mettre toutes les colonnes de texte dans une table séparée avec un lien FKEY retour à cette table. Imaginons que vous souhaitiez rechercher l'enregistrement avec l'ID "4", puis que vous récupériez toutes les lignes, y compris les données des colonnes TEXT de la table jointe. Et imaginons que les tables ont 500 000 lignes.

  2. Faire une table de 15 colonnes de varchars et similaires, et d'inclure vos colonnes TEXT dans la même table. Encore une fois, imaginez la même chose que ci-dessus - saisissez l'ID d'enregistrement 4 et tirez l'enregistrement complet, et il y a 500 000 lignes dans la table.

Je veux dire, dans la plupart des bases de données, la façon dont je le comprends, quand vous descendez à la couche physique de la façon dont ces colonnes TEXT fonctionnent, ils gardent un petit ID réellement dans la colonne de table sur chaque ligne, et cette identification va à un bloc de page séparé et exclusif (ou autre nomenclature) dans la base de données. Donc, pour moi, il semblerait que l'option B s'exécuterait plus vite car il n'y a pas besoin de la surcharge de la jointure fkey, et parce que les colonnes TEXT n'occupent pas plus qu'un espace entier dans cette colonne dans cette table donnée - et cet entier est une clé dans la base de données à un bloc de page ailleurs.

Répondre

3

(B) est correct, pour la raison donnée dans la question elle-même.

16

PostgreSQL ne gère pas les colonnes TEXT de la même manière que les autres SGBD.

De leurs docs:

Astuce: Il n'y a pas de différence de performance entre ces trois types, à l'exception de la taille de stockage accrue lors de l'utilisation du type complété par des blancs, et quelques cycles supplémentaires pour vérifier la longueur lors de l'enregistrement dans une colonne contrainte par la longueur. Alors que character (n) a des avantages de performance dans d'autres systèmes de base de données, il n'a pas de tels avantages dans PostgreSQL. Dans la plupart des situations, le texte ou le caractère variable doit être utilisé à la place.

Check out the manual

+0

+1 pour déterrer la phrase exacte que je vais faire quand je lis la question! – some

Questions connexes