Quel type de données de colonne dois-je utiliser pour stocker de grandes quantités de texte ou de HTML?

J’ai une colonne dans une table qui était varchar (255) au début et à cause de certaines modifications de la conception, elle est maintenant varchar (1536) = 1024 + 512. Je ne vais pas chercher ou indexer ce champ, est-ce logique? stocker cette valeur dans un autre type de données que varchar si vous souhaitez optimiser cette performance?

Oui, ce sera mieux si vous pouvez stocker les valeurs dans le type de données ” TEXT “. Pour plus de détails, veuillez lire cet article .

En ce qui concerne la connaissance des exigences de stockage, vous pouvez lire celle-ci .

J’espère que cela aide.

Vous devriez utiliser TEXT comme les autres ont dit, mais il y a quelques conseils importants à chaque fois que vous utilisez TEXT ou BLOB: découplez-les de votre table de base car ils ralentissent vraiment l’access à la table. Imaginez la structure suivante:

 CREATE TABLE article ( id INT(10) UNSIGNED, title VARCHAR(40), author_id INT(10) UNSIGNED, created DATETIME, modified DATETIME ); CREATE TABLE article_body ( id INT(10) UNSIGNED, body TEXT ); 

Lorsque vous répertoriez des articles, vous pouvez utiliser le tableau de l’ article (5 derniers articles de l’auteur 33):

 SELECT id, title FROM article WHERE author_id=33 ORDER BY created DESC LIMIT 5 

Et quand quelqu’un ouvre vraiment l’article, vous pouvez utiliser quelque chose comme:

 SELECT a.title, ab.body FROM article AS a LEFT JOIN article_body AS ab ON ab.id = a.id WHERE a.id=82 

Vous devriez utiliser un fichier et non une firebase database pour le stocker. Surtout pas MySQL. J’ai écrit une fois en expliquant ce qui se passe si, par exemple, vous téléchargez des images à partir d’un BLOB de firebase database, consultez http://mysqldump.azundris.com/archives/36-Serving-Images-From-A-Database.html . En utilisant des fichiers, vous pouvez utiliser le raccourci du serveur Web en utilisant l’appel système sendfile (2), et il est beaucoup plus rapide de l’utiliser.

MySQL n’a pas non plus d’API BLOB. Cela signifie qu’il est impossible de télécharger ou de télécharger des objects de taille supérieure à max_allowed_packet, et qu’il est difficile de contourner ce problème en utilisant SUBSTRING (), car cela produirait des copies inutiles de chaînes dans la mémoire du serveur.

Si vous DEVEZ absolument stocker des données BLOB ou TEXT sur le serveur, vous avez le choix entre TINYTEXT, TEXT, MEDIUMTEXT et LARGETEXT, qui sont limités à 255, 65535, 16 Mo et 4 Go de données sur le serveur, également limités par max_allowed_packet.

Les informations BLOB ou TEXT volumineuses vont complètement détruire la densité des données dans votre table. Il est utile de créer une relation artificielle 1: 1 ou 1: 0 avec une table BLOB, puis de stocker les blobs dans cette table supplémentaire.

Lorsque MySQL affiche un plan de requête utilisant «tempoary», cela signifie que le serveur doit matérialiser la table des jeux de résultats sur le serveur avant de fournir le résultat. Cela se fait avec les tables MEMORY, si possible. N’importe quel type de texte ou de type BLOB ne peut pas être représenté dans les tables MEMORY. La table temporaire frappe alors le disque en tant que table MyISAM.

Vous devez parsingr ces plans de requête et les convertir en quelque chose qui charge les valeurs d’ID des valeurs BLOB / TEXT à la place. Dans une seconde requête, vous deviez alors SELECT id, texte FROM texttable WHERE dans (…) pour obtenir les valeurs TEXT / BLOB. Cela rend la requête avec ‘using temporaire’ n’utilise pas les types TEXT ou BLOB, et vous pouvez obtenir les champs TEXT avec une requête sortingviale qui s’exécute sans ‘utiliser temporaire’.

Vous pouvez en apprendre plus sur les composants internes de MySQL TEXT et BLOB Storage en lisant http://www.mysqlperformanceblog.com/2010/02/09/blob-storage-in-innodb/

J’utiliserais du text pour des colonnes de longueur variable.