用户名,密码的MySQL多列索引

时间:2015-12-09 09:20:19

标签: mysql database-indexes

在MySQL数据库中,我必须维护这个表有两个索引

CREATE TABLE users (
    id INTEGER UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,

    -- some attributes

    nickname VARCHAR (20) NOT NULL UNIQUE,
    password VARCHAR (20) NOT NULL,

    -- other attributes

    PRIMARY KEY (id),
    INDEX auth (nickname, password),
    INDEX region_id (region)
);

我的问题是关于auth索引。它是一个多列索引,但由于nicknameUNIQUE,因此password不是多余的?为什么nicknamepassword都有索引?为什么不nickname,因为它是UNIQUE

2 个答案:

答案 0 :(得分:1)

拥有这个双列索引mysql可以运行查询进行身份验证检查(不通过用户名和密码选择数据,idcount(id))而不实际访问表中的数据,只有索引本身,这是最快的

答案 1 :(得分:0)

仅当您要搜索索引字段时才需要索引。

我认为最好只创建昵称字段的索引,如果它已经是唯一的那么。

但请确保始终在where子句中使用nickname字段,或者在密码字段之前首先加入。

e.g。其中nickname =' somevalue'和密码=' somepassword'。这将加速查询并减少查询结果的获取时间。