Ce type de données de colonne dois-je utiliser pour stocker de grandes quantités de texte ou html
J'ai une colonne dans une table qui a utilisé pour être de type varchar(255) en début et en raison de certaines modifications de la conception maintenant, il est de type varchar(1536) = 1024 + 512. Je ne vais pas être à la recherche ou à l'indexation de ce domaine, est-il judicieux de stocker cette valeur dans un autre type de données varchar si vous souhaitez optimiser ce pour la performance?
- Ceci devrait résoudre le problème - stackoverflow.com/questions/9322569/...
Vous devez vous connecter pour publier un commentaire.
Oui, il sera mieux si vous pouvez stocker les valeurs dans la "
TEXT
" type de données. Pour plus de détails, veuillez lire cet article.Au sujet de la connaissance des exigences de stockage, vous pouvez lire cette une.
Espère que cela aide.
Vous devez utiliser
TEXT
comme les autres ont dit, mais il ya quelques conseils importants à chaque fois que vous utilisez TEXT ou BLOB: découpler leur forme de votre table de base comme ils vraiment ralentir l'accès à la table. Imaginez la structure suivante:Chaque fois que vous la liste des articles, vous pouvez utiliser le
article
table (5 derniers articles de l'auteur, 33):Et quand quelqu'un ouvre l'article, vous pouvez utiliser quelque chose comme:
INT
,VARCHAR
,DATE
etc. le moteur de stockage qui permettra de réserver le maximum d'espace. Par exemple, un VARCHAR(100) aura toujours de 100 octets (+méta-informations) dans le dossier. De cette façon, une constante longueur d'enregistrement peut être calculée, et la n-ième enregistrement sera toujours en décalagen * record length
. - Dans l'autre main, il serait assez fastidieux de réserve de 65536 octets pour chaqueTEXT
champ afin qu'il alloue de l'espace de manière dynamique. Dans cette situation, un redord la taille n'est plus fixé, et il faut plus d'opérations à traiter avec eux.id
ettitle
: Si il y a un index contenant ces champs, MySQL peut lire directement les données de l'index et de ne pas toucher la table de données. - Ce qui est utile dans certains cas, mais ne remplacera pas la technique que j'ai décrite.Vous devriez être en utilisant un fichier, pas une base de données pour stocker cette. Surtout pas de MySQL. J'ai fait un article une fois expliquer ce qui se passe si vous, par exemple de télécharger des images d'une base de données d'objets BLOB, voir http://mysqldump.azundris.com/archives/36-Serving-Images-From-A-Database.html. À l'aide de fichiers, vous pouvez utiliser le serveur web accès rapide à l'aide de la sendfile(2) de l'appel système, et il est beaucoup plus rapide pour l'utiliser.
MySQL n'a pas de BLOB API. Cela signifie que, il est impossible de télécharger ou de télécharger des objets de plus de max_allowed_packet, et il est difficile de travailler votre chemin autour de cela à l'aide de la fonction SUBSTRING(), parce que cela va rendre inutile copies de chaînes de caractères dans la mémoire du serveur.
Si vous DEVEZ absolument store GOUTTE de TEXTE ou de données dans le serveur, vous avez le choix de TINYTEXT, TEXT, MEDIUMTEXT et LARGETEXT qui sont limitées à 255, 65535, 16 MO et 4 go de données dans le serveur, en outre limitée par max_allowed_packet.
Grand BLOB ou TEXT information complètement l'épave de la densité des données dans votre tableau. Il est utile de créer un artificiel 1:1 ou 1:0 relation à une GOUTTE de la table, puis stocker les objets blob dans cette table supplémentaire.
Lorsque MySQL montre un plan de requête qui est 'a l'aide des tempoary', cela signifie que le serveur a besoin de matérialiser le résultat de la table de jeu sur le serveur avant de livrer le résultat. Ceci est fait en utilisant la MÉMOIRE de tables, si possible. Tout TEXTE ou de type BLOB ne peut pas être représenté dans la MÉMOIRE de tables, d'où la table temporaire frappe, puis le disque comme un MyISAM table à la place.
Vous avez besoin de scanner pour de tels plans de requête, et de les convertir en quelque chose qui charge les valeurs d'ID de l'objet BLOB/TEXT valeurs à la place. Dans une deuxième requête, vous devez ensuite SÉLECTIONNER l'id, thetext DE texttable where id in ( ... ) pour obtenir le TEXTE/valeurs BLOB. Que va faire la requête avec 'aide temporaire" ne pas utiliser TEXT ou BLOB, et vous pouvez obtenir les champs de TEXTE, puis avec une simple requête qui s'exécute sans 'aide temporaire".
Vous pouvez en apprendre plus sur le fonctionnement interne de MySQL TEXTE et le stockage BLOB par la lecture de http://www.mysqlperformanceblog.com/2010/02/09/blob-storage-in-innodb/
Je voudrais utiliser
text
pour les colonnes de longueur variable.