我有一个相当简单的表(原谅错误/愚蠢,我还在学习。为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`)
);
我读过添加索引可以提高查询的性能,因为它不需要查看整个数据库。相反,它会查看索引并匹配数据(如果我错了,请纠正我)。
我已经找到了如何创建足够好的索引,但不是我应该索引的索引 我应该在用户名上有我的索引吗?电子邮件地址,用户ID或我尚未添加的某个字段?
答案 0 :(得分:6)
您应该在几乎任何要进行键控查找的列上都有索引。在您的某个查询中,某些事情会发生where userid = ?
吗?然后在userid
上编制索引。你打算在username
上进行查找吗?然后索引用户名。在password
上怎么样?可能不是,所以不要打扰。
答案 1 :(得分:4)
您应该仅根据列的实际使用情况创建索引
WHERE 中的用法:
如果您从未拥有WHERE username='xyz'
,则需要无索引
如果你有很多这些,那么添加一个索引
JOIN 中的用法:
如果你从来没有JOIN xxxx ON x.userid=u.userid
,那么就不需要索引了
如果你有很多这些,那么添加一个索引
答案 2 :(得分:2)
您要搜索哪些字段?那些应该是你的第一个索引候选人。同时索引将成为其他表中的外键的任何列(userid
似乎可能是候选者)。
答案 3 :(得分:0)
主要ID应转到用户ID。 从现在到现在,它都非常有用。
答案 4 :(得分:0)
需要考虑的主要问题是该字段是否经常用于搜索和过滤记录。如果是,请对其进行索引。其他答案很好地解决了这个问题。
但是,请记住索引增加了一些开销来插入和更新操作。如果一个字段不断更新,但很少在搜索子句中使用,您可能会失望地发现索引实际上是在减慢您的速度,而不是提高性能。