La taille est synonyme de performance ! Plus la taille est petite, mieux c'est. Pas aujourd'hui ni demain, mais un jour, vos tables atteindront une taille où il y aura de sérieux goulots d'étranglement, quelle que soit la conception que vous avez mise en place. Mais vous pouvez prévoir certains de ces goulets d'étranglement potentiels dans votre phase de conception qui sont susceptibles de se produire en premier et essayer d'étendre le temps votre db fonctionnera rapidement et heureusement jusqu'à ce que vous ayez besoin de repenser votre schéma ou de l'échelle horizontale en ajoutant plus de serveurs.
Dans votre cas, il y a de nombreuses fuites de performance que vous pouvez rencontrer : Les grandes jointures sont presque impossibles avec de longues varchar
colonnes. L'indexation sur ces colonnes est une vraie plaie. Votre disque doit stocker les données. Une page de mémoire peut contenir moins de rangées et les balayages de table seront beaucoup plus lents. De plus, le cache des requêtes ne vous sera probablement d'aucune aide dans ce cas.
Vous devez vous demander : Combien d'insertions par an peuvent avoir lieu ? Quelle est la longueur moyenne ? Est-ce que j'ai vraiment besoin de plus de 200 caractères ou est-ce que je peux attraper cela dans le front-end de mon application, même en informant les utilisateurs de la longueur maximale ? Puis-je diviser la table en une table étroite pour l'indexation et le balayage rapides et une autre pour contenir des données supplémentaires, moins fréquemment utilisées et de taille croissante ? Puis-je classer les données varchar possibles dans des catégories et extraire ainsi certaines des données dans quelques colonnes plus petites, peut-être de type int ou bool, et réduire la colonne varchar de cette façon ?
Vous pouvez faire beaucoup de choses ici. Il est peut-être préférable de partir d'une première hypothèse, puis de revoir la conception étape par étape en utilisant des données de performance mesurées en situation réelle. Bonne chance.
1 votes
Une table avec un seul index
VARCHAR(255) utf8mb4
avec ~ 150k lignes mesurait 11.5MB. Une table avec uneVARCHAR(48) utf8mb4
Une colonne indexée avec les mêmes données (longueur maximale de 46 caractères) utilise 4,5 Mo. Ce n'est pas vraiment une grande différence dans les requêtes, car la colonne est indexée. Mais cela s'ajoute aux E/S des requêtes et à des choses comme les sauvegardes de la base de données.