Que dois-je indexation? Noms d'utilisateur ou ID utilisateur?
-
14-10-2019 - |
Question
J'ai une table assez simple (pardonner les erreurs / stupidité, je suis encore à apprendre écrit pour MySQL.) :
CREATE TABLE IF NOT EXISTS `userdata` (
`userid` UNSIGNED int(18446744073709551615) AUTO_INCREMENT,
`username` char(255) NOT NULL,
`password` char(255) NOT NULL,
`salt` char(255) NOT NULL,
`email` char(255) NOT NULL,
PRIMARY KEY(`userid`)
);
J'ai lu que l'ajout d'un index améliore les performances d'une requête, car il n'a pas besoin de regarder à travers la base de données. Au lieu de cela, il va chercher dans les données d'index et match (corrigez-moi si je me trompe).
Je l'ai trouvé comment créer un indice assez bien, mais pas ce que je devrais être indexation.
Dois-je avoir mon index sur les noms d'utilisateur? adresses e-mail, ID utilisateur, ou un domaine que je n'ai pas encore à ajouter?
La solution
vous ne devez créer un index basé sur l'utilisation réelle vous de la colonne
utilisation dans un WHERE :
si vous n'avez WHERE username='xyz'
, l'index est pas nécessaire
si vous avez beaucoup d'entre eux, puis ajouter un index
utilisation dans un JOIN :
si vous n'avez pas JOIN xxxx ON x.userid=u.userid
, alors aucun index est nécessaire
si vous avez beaucoup d'entre eux, puis ajouter un index
Autres conseils
Vous devriez avoir un index sur à peu près toutes les colonnes que vous faites calée sur les recherches. Est-ce quelque chose va faire une where userid = ?
dans l'une de vos questions? Indice ensuite sur userid
. Est-ce que vous allez faire une recherche sur des username
? Puis index sur le nom d'utilisateur. Qu'en est-il sur password
? Probablement pas, donc ne vous inquiétez pas.
Quels champs vous rechercherez sur? Celles-ci devraient être vos premiers candidats pour les index. indexent également des colonnes qui deviendront des clés étrangères dans d'autres tables (userid
semble comme un candidat probable).
ID primaire devrait aller à l'ID utilisateur. Il est très utile maintenant et à long terme.