Aggiunta di un indice a una tabella MySQL
Domanda
La documentazione di MySQL non è molto chiara al riguardo. Voglio aggiungere un indice a una tabella esistente. La tabella è una tabella utente con ID di accesso e password e desidero creare un indice per ottimizzare l'accesso.
Ecco come ho pensato di provarlo:
mysql> ALTER TABLE `users` ADD INDEX(`name`,`password`);
Questo creato:
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 | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
Questo ha ottenuto ciò che stavo cercando di fare? (Ottimizzare l'accesso?) In precedenza avevo solo una chiave primaria in un campo chiamato 'id'.
Soluzione
Sì, questo è stato realizzato creando un indice. L'indice è denominato " name
" (se non si assegna un nome all'indice, tenta di utilizzare la prima colonna specificata nell'indice). L'indice è composto da due colonne: name
in posizione 1 e password
in posizione 2.
Per quanto riguarda se questo ottimizzerà o meno la registrazione, ciò dipende da come le tue query possono o meno utilizzare l'indice. Dovresti anche imparare come analizzare le query con EXPLAIN
.
Dovresti anche leggere di più sulla memorizzazione delle password.
Ecco un buon blog sull'argomento: " Probabilmente stai memorizzando le password in modo errato "
Altri suggerimenti
A meno che i nomi utente non siano univoci nella tua applicazione, non penso che abbia davvero senso indicizzare " password " ;; l'indice sarà più grande e gli inserti saranno più lenti senza valore aggiunto.