Bref résumé :
(juste mon avis)
- pour l'adresse e-mail -
VARCHAR(255)
- pour le nom d'utilisateur -
VARCHAR(100)
ouVARCHAR(255)
- pour id_username - utilisez
INT
(sauf si vous prévoyez plus de 2 milliards d'utilisateurs dans votre système) - numéros de téléphone -
INT
ouVARCHAR
ou peut-êtreCHAR
(cela dépend si vous souhaitez stocker la mise en forme) - messages -
TEXT
- dates -
DATE
ouDATETIME
(incluez certainement les heures pour des choses comme les publications ou les e-mails) - argent -
DECIMAL(11,2)
- divers - voir ci-dessous
En ce qui concerne l'utilisation d'InnoDB car VARCHAR
est censé être plus rapide, je ne m'en soucierais pas, ni de la vitesse en général. Utilisez InnoDB car vous devez effectuer des transactions et/ou vous souhaitez utiliser des contraintes de clé étrangère (FK) pour l'intégrité des données. De plus, InnoDB utilise le verrouillage au niveau de la ligne alors que MyISAM n'utilise que le verrouillage au niveau de la table. Par conséquent, InnoDB peut mieux gérer des niveaux de concurrence plus élevés que MyISAM. Utilisez MyISAM pour utiliser des index de texte intégral et pour un peu moins de surcharge.
Plus important pour la vitesse que le type de moteur :placez des index sur les colonnes sur lesquelles vous devez effectuer une recherche rapide. Mettez toujours des index sur vos colonnes ID/PK, comme l'id_username que j'ai mentionné.
Plus de détails :
Voici un tas de questions sur les types de données MySQL et la conception de la base de données (attention, plus que ce que vous avez demandé) :
-
type de données mysql pour le numéro de téléphone et l'adresse
-
Meilleur type de données mysql pour les grammes, milligrammes , microgrammes et kilojoules
Et quelques questions sur quand utiliser le moteur InnoDB :
J'utilise juste tinyint
pour presque tout (sérieusement).
Modifier - Comment stocker les "messages :"
Vous trouverez ci-dessous quelques liens avec plus de détails, mais voici la version courte. Pour stocker des "messages", vous avez besoin d'espace pour une longue chaîne de texte. CHAR
la longueur maximale est de 255, donc ce n'est pas une option, et bien sûr CHAR
gaspillerait des caractères inutilisés par rapport à VARCHAR
, qui est de longueur variable CHAR
.
Avant MySQL 5.0.3, VARCHAR
la longueur maximale était de 255, il vous resterait donc TEXT
. Cependant, dans les nouvelles versions de MySQL, vous pouvez utiliser VARCHAR
ou TEXT
. Le choix se résume à la préférence, mais il y a quelques différences. VARCHAR
et TEXT
la longueur maximale est maintenant de 65 535, mais vous pouvez définir votre propre max sur VARCHAR
. Disons que vous pensez que vos messages n'auront besoin que de 2000 max, vous pouvez définir VARCHAR(2000)
. Si vous dépassez tous les limites, vous pouvez ALTER
vous tablez plus tard et remplacez-le par VARCHAR(3000)
. Par contre, TEXT
stocke en fait ses données dans un BLOB
(1). J'ai entendu dire qu'il pouvait y avoir des différences de performances entre VARCHAR
et TEXT
, mais je n'ai vu aucune preuve, donc vous voudrez peut-être approfondir cela, mais vous pouvez toujours modifier ce détail mineur à l'avenir.
Plus important encore, rechercher cette colonne "post" en utilisant un index de texte intégral au lieu de LIKE
serait beaucoup plus rapide (2). Cependant, vous devez utiliser le moteur MyISAM pour utiliser l'index de texte intégral car InnoDB ne le prend pas en charge . Dans une base de données MySQL, vous pouvez avoir un mélange hétérogène de moteurs pour chaque table, il vous suffira donc de faire en sorte que votre table "posts" utilise MyISAM. Cependant, si vous avez absolument besoin de "posts" pour utiliser InnoDB (pour les transactions), configurez un déclencheur pour mettre à jour la copie MyISAM de votre table "posts" et utilisez la copie MyISAM pour toutes vos recherches en texte intégral.
Voir en bas pour quelques citations utiles.
Enfin, voici un excellent article sur les avantages et les inconvénients de VARCHAR par rapport à TEXT. Cela concerne également le problème de performances :