在这里添加哪个索引?

时间:2017-04-14 11:48:30

标签: mysql sql

此查询以慢查询日志结束,因为没有索引的连接。我添加哪个索引以及在哪里?这个简单的查询需要500毫秒到1,2秒。我想它应该可以在100毫秒内轻松完成。

SELECT users.*, user_roles.apirequests, user_roles.downloadrequests, NOW() AS now
            FROM users
            INNER JOIN user_roles ON user_roles.id = users.role
            WHERE users.rsstoken =
            '775e155c780ed5af9119f797f814c714' LIMIT 1;

查看查询并显示创建表:https://kopy.io/iCz1z

1 个答案:

答案 0 :(得分:2)

对于此查询:

SELECT u.*, ur.apirequests, ur.downloadrequests, NOW() AS now
FROM users u INNER JOIN
     user_roles ur
     ON ur.id = u.role
WHERE u.rsstoken = '775e155c780ed5af9119f797f814c714';

最佳索引是users(rsstoken, role)user_roles(id)。您已经拥有第二个索引,因为id被声明为主键。

您还可以在apirequestsdownloadrequests的索引中加入user_rolesuser_roles(id, apirequests, downloadrequests)。这可能是一个非常小的优化 - 我通常会反对它,因为id已经是主键,行大小很小。