将索引添加到MySQL表

时间:2009-01-03 02:00:19

标签: mysql indexing

MySQL文档对此并不十分清楚。我想为现有表添加索引。该表是一个带有登录ID和密码的用户表,我想为此创建一个索引来优化登录。

这就是我以为我会尝试的方式:

mysql> ALTER TABLE `users` ADD INDEX(`name`,`password`);

这创建了:

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      |         |     
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

这实现了我的目标吗? (优化登录?)以前我只在一个名为'id'的字段上有一个主键。

2 个答案:

答案 0 :(得分:6)

是的,这实现了创建索引。索引名为“name”(如果不为索引指定名称,它会尝试使用您在索引中指定的第一列)。索引由两列组合而成:位置1的name和位置2的password

至于是否会优化日志记录,这取决于您的查询可能会或可能不会使用索引。您还应该了解如何使用EXPLAIN分析查询。


您还应该阅读有关存储密码的更多信息。

这是一个关于这个主题的好博客:“You're Probably Storing Passwords Incorrectly

答案 1 :(得分:1)

除非用户名在您的应用程序中不是唯一的,否则我认为索引“密码”并不合理。索引会更大,插入速度会慢,没有附加值。