有关MySQL索引及其功能的问题

时间:2010-03-18 16:28:19

标签: php mysql

说我的数据库中有一个普通的表,如此

----------------------------
| id | username | password |
----------------------------
| 24 | blah     | blah     |
----------------------------

主键分配给id列。现在,当我运行这样的Mysql查询时:

SELECT id FROM table WHERE username = 'blah' LIMIT 1

主键索引是否有帮助?如果我告诉它匹配用户名,那么不应该将用户名列编入索引吗?

感谢您的时间

5 个答案:

答案 0 :(得分:3)

通常,在创建索引时,您可以根据对要查询的内容的期望来执行此操作。因此,如果您事先知道您将始终或通常按用户名查询,那么您应该在用户名上创建索引。如果您使用id列作为其他表中的标识符或外键,则在id列上创建索引。

直接回答您的问题 - 是的,如果您按用户名查询,则索引应该是用户名,如果您从不按ID查询。

答案 1 :(得分:2)

在这种情况下,主键索引无效。但是,它对许多其他情况很有用。您可以在用户名字段中添加二级索引,如下所示:

alter table mytable add index (username);

通常添加整数字段并将其指定为任何特定表的主键的原因是,该字段可以用作其他表中的外键。

答案 2 :(得分:1)

在此查询中,它无济于事。用户名的索引会对此有所帮助。

但是索引会显着加速并加入id。

答案 3 :(得分:1)

你是对的。索引仅在列上有搜索,连接或聚合函数时才会提高性能。

答案 4 :(得分:1)

不,不是在这种情况下。

如果在查询中运行“EXPLAIN”,您将看到它不会被使用。

EXPLAIN SELECT id FROM table WHERE username = 'blah' LIMIT 1;

取决于您的查询,将使用哪个索引(如果有)。用户名的索引可能会加快您的查询速度。