Mysql
 sql >> Base de données >  >> RDS >> Mysql

Lorsque vous avez un champ TEXT dans MySQL ou PostgreSQL, devez-vous le mettre dans une table séparée ?

Pas avec PostgreSQL, d'après le manuel :

Ainsi, une grande colonne de caractères (telle que TEXT ou VARCHAR sans limite de taille spécifiée) est stocké à l'écart des données de la table principale. Donc, PostgreSQL a intégré votre optimisation "le mettre dans une table séparée". Si vous utilisez PostgreSQL, organisez votre table de manière raisonnable et laissez la disposition des données à PostgreSQL.

Je ne sais pas comment MySQL ou d'autres RDBM organisent leurs données.

La raison derrière cette optimisation est que la base de données conservera généralement les données de chaque ligne dans des blocs contigus sur le disque pour réduire la recherche lorsque la ligne doit être lue ou mise à jour. Si vous avez une colonne TEXT (ou un autre type de longueur variable) dans une ligne, la taille de la ligne est variable, donc plus de travail est nécessaire pour passer d'une ligne à l'autre. Une analogie serait la différence entre accéder à quelque chose dans une liste chaînée et accéder à un tableau ; avec une liste chaînée, vous devez lire trois éléments un à la fois pour arriver au quatrième, avec un tableau que vous venez de décaler 3 * element_size octets depuis le début et vous y êtes en une seule étape.