说我的数据库中有一个普通的表,如此
----------------------------
| id | username | password |
----------------------------
| 24 | blah | blah |
----------------------------
主键分配给id列。现在,当我运行这样的Mysql查询时:
SELECT id FROM table WHERE username = 'blah' LIMIT 1
主键索引是否有帮助?如果我告诉它匹配用户名,那么不应该将用户名列编入索引吗?
感谢您的时间
答案 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;
取决于您的查询,将使用哪个索引(如果有)。用户名的索引可能会加快您的查询速度。