Ajouter un index à une table MySQL
Question
La documentation de MySQL n’est pas très claire à ce sujet. Je veux ajouter un index à une table existante. La table est une table utilisateur avec l'identifiant de connexion et le mot de passe. Je souhaite créer un index à cette fin afin d'optimiser la connexion.
Voici comment je pensais pouvoir l'essayer:
mysql> ALTER TABLE `users` ADD INDEX(`name`,`password`);
Cette création:
mysql> show index from karmerd.users;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| users | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | |
| users | 1 | name | 1 | name | A | 2 | NULL | NULL | | BTREE | |
| users | 1 | name | 2 | password | A | 2 | NULL | NULL | YES | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
Est-ce que cela a permis d'atteindre ce que j'essayais de faire? (Optimiser la connexion?) Auparavant, je n'avais qu'une clé primaire dans un champ appelé "id".
La solution
Oui, cela a permis de créer un index. L'index s'appelle " nom
" (Si vous ne nommez pas l'index, il essaie d'utiliser la première colonne que vous spécifiez dans l'index). L'index est composé de deux colonnes: nom
en position 1 et mot de passe
en position 2.
Quant à savoir si cela optimisera ou non la journalisation, cela dépend de la manière dont vos requêtes peuvent ou non utiliser l'index. Vous devez également apprendre à analyser les requêtes avec EXPLAIN
.
Vous devriez également en savoir plus sur le stockage des mots de passe.
Voici un bon blog sur le sujet: " Vous ne stockez probablement pas les mots de passe de manière incorrecte "
Autres conseils
À moins que les noms d'utilisateur ne soient pas uniques dans votre application, je ne pense pas que ce soit vraiment logique d'indexer "mot de passe"; l'index sera plus grand et les insertions seront plus lentes sans aucune valeur ajoutée.