我应该索引什么?用户名或用户ID?

Ale*_*der 5 mysql sql indexing create-table

我有一个相当简单的表(原谅错误/愚蠢,我还在学习.为MySQL编写):

CREATE TABLE IF NOT EXISTS  `userdata` (
    `userid`    UNSIGNED int(18446744073709551615) AUTO_INCREMENT, 
    `username`  char(255) NOT NULL,
    `password`  char(255) NOT NULL,
    `salt`      char(255) NOT NULL,
    `email`     char(255) NOT NULL,

    PRIMARY KEY(`userid`)
);
Run Code Online (Sandbox Code Playgroud)

我已经读过添加索引可以提高查询的性能,因为它不需要查看整个数据库.相反,它会查看索引并匹配数据(如果我错了,请纠正我).

我已经找到了如何创建一个足够好的索引,但不是我应该索引的索引.
我应该在用户名上有我的索引吗?电子邮件地址,用户ID或我尚未添加的某个字段?

And*_*ter 6

您应该在几乎任何要进行键控查找的列上都有索引.在你的where userid = ?一个查询中有什么东西可以做吗?然后索引userid.你打算进行查找username吗?然后索引用户名.怎么样password?可能不是,所以不要打扰.


KM.*_*KM. 5

您只应根据您实际使用的列创建索引

WHERE中的用法:
如果您从未拥有过WHERE username='xyz',则如果没有,则不需要索引
,然后添加索引

JOIN中的用法:
如果您从没有任何JOIN xxxx ON x.userid=u.userid索引,则
如果有很多索引,则不需要索引,然后添加索引

  • @亚历山大 是的,这很可能是多余的,因为数据库仍然需要对它进行索引以有效地检查是否有重复的pk。 (2认同)