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

MySQL multiple-column indexes on username, password

在我必须维护的 MySQL 数据库中 我有这个 table 和两个索引

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

仅当您要通过索引字段进行搜索时才需要索引。

我认为只有在昵称字段已经是唯一的情况下才创建索引更好。

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

例如其中昵称 = 'somevalue' 和密码 = 'somepassword'。这将加速查询并减少查询结果获取时间。

有了这个两列索引mysql可以运行查询鉴权(没有select数据的,只有id或者count(id)通过用户名和密码)而不实际访问 table 中的数据,仅通过索引本身,这是最快的