2010-03-18 56 views
1

说问题我有一个普通的表在我的数据库,像这样关于MySQL的指数及其功能

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

主键被分配到ID列。现在,当我运行一个MySQL查询像这样:

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

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

感谢您的时间

回答

3

在一般情况下,当你创建一个索引,你做它的基础上的东西将被查询的期望。因此,如果您事先知道您将始终(或通常)通过用户名进行查询,则应该为用户名创建索引。如果您使用id列作为其他表的标识符或外键,则在id列上创建一个索引。

直接回答你的问题 - 是的,指数应该是用户名,如果你的用户名查询,如果你从来没有通过ID查询。

1

在此查询它不会帮助。用户名的索引将有助于这个。

但该指数将显著加快何在,并加入的ID。

2
在这种情况下主键索引不会帮助

没有。但是,它对于许多其他情况很有用。可以将次要索引添加到用户名字段是这样的:

alter table mytable add index (username); 

之所以通常添加的整数字段并将其指定为主键于任何特定的表是,使得字段可以用作一个外键在其他表格中。

1

你说得对。索引仅在列上存在搜索,连接或聚合功能时提高性能。

1

不,不是在这种情况下。

如果您运行的查询“解释”,你会看到,它不会被使用。

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

这取决于您的查询,哪些索引,如果有的话,将被使用。用户名上的索引可能会加快您的查询速度。