MySQL varchar(2000) vs texte?
J'ai besoin de stocker en moyenne un paragraphe de texte, qui serait d'environ ~800 caractères dans la base de données. Dans certains cas rares, il peut aller jusqu'à 2000-2500~ caractères. J'ai lu le manuel et je sais qu'il ya beaucoup de ces questions déjà, mais j'ai lu plus de 10+ questions sur stackoverflow et je trouve toujours un peu difficile à comprendre si je dois simplement utiliser du texte ou quelque chose comme varchar(2000). La moitié semble dire l'utilisation de type varchar, tandis que l'autre demi-dire du texte. Certaines personnes disent toujours utiliser le texte si vous avez plus de 255 caractères (oui, c'était après 5.0.3 qui a permis varchar jusqu'à 65k). Mais ensuite j'ai pensé à moi-même si je devais utiliser du texte chaque fois que les personnages ont plus de 255, alors pourquoi mysql peine l'augmentation de la taille du tout si cela a toujours été la meilleure option?
Ils ont une taille variable de stockage que j'ai lu, donc y aurait-il pas de différence dans ma situation? Personnellement, j'ai été penché vers varchar(2000) puis j'ai lu que varchar stocke les données en direct tandis que le texte ne le fait pas. Est-ce à dire que, si j'ai constamment la sélection de cette colonne, le stockage de données varchar serait mieux, et à l'inverse si j'ai rarement la sélection de cette colonne, puis en utilisant le texte serait mieux? Si cela est vrai, je pense que je voudrais maintenant, choisissez la colonne de texte que je ne vais pas être la sélection de cette colonne de nombreuses fois j'ai l'exécution d'une requête sur la table. Si c'est important, cette table est également fréquemment rejoint aussi bien (mais qui ne sera pas le choix de la colonne), serait-ce aussi les avantages de l'utilisation de texte?
Sont mes hypothèses de corriger ce que je doit aller avec le texte dans ce cas?
- Penser en termes de l'utilisation de la mémoire. Les champs VARCHAR sont une partie de la ligne, où les colonnes de TEXTE sont juste fait sur le disque par une adresse dans la ligne. Votre décision aura une incidence sur la mise en cache de requêtes (combien de jeux de résultats peuvent tenir dans ce mémoire), la table de cache (le nombre de tables qui peuvent tenir dans la mémoire), le nombre de lignes tenir dans diverses par requête tampons, etc.
Vous devez vous connecter pour publier un commentaire.
Lorsqu'une table est de type TEXT ou BLOB colonnes, le tableau ne peut pas être stockée dans la mémoire. Cela signifie que chaque requête, qui ne frappe pas de cache) a accès au système de fichiers - qui est un ordre de grandeur plus lent que la mémoire.
Par conséquent, vous devez conserver cette colonne de TEXTE dans un autre tableau qui est accessible uniquement lorsque vous en avez besoin. De cette façon, la table d'origine peuvent être stockées en mémoire et sera beaucoup plus rapide.
Pense que de séparer les données dans un "mémoire de la table" et une "table de fichiers". La raison pour cela est pour éviter l'accès du système de fichiers, sauf lorsque cela s'avère nécessaire (c'est à dire que quand vous avez besoin le texte).
Vous n'avez pas gagner quoi que ce soit par stockage du texte dans plusieurs tables. Vous avez toujours accès au système de fichiers.
Oui.
Vous pouvez essayer (poteaux, post_text) ou (post_details, poteaux) ou quelque chose comme ça.
Si la description est une colonne de TEXTE et d'exécuter des requêtes sur cette table qui n'a pas besoin de description, il serait certainement préférable.
Je pense que vous le résume bien. Une autre chose que vous pourriez envisager est juste déplacer le "texte" à une autre table... et rejoignez retour à la fiche. De cette manière, chaque fois que vous êtes en fait en utilisant la table de maître, les données supplémentaires de l'endroit où le "texte" est n'est même pas prendre l'espace dans la fiche. Quand vous en avez besoin, vous pouvez vous joindre à la table. De cette façon, vous pouvez l'enregistrer dans un varchar juste au cas où vous voulez faire quelque chose comme " où le texte que... "