MySQL 查询性能 (InnoDB)

MySQL Query Performance (InnoDB)

我有一个 InnoDB table 约 50MB(约 500.000 个条目)。

Table结构:iduser_id信息


查询:

我想获取ID大于10的该用户的下一个条目:

SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 10 LIMIT 1 (响应:~0.5 毫秒)


我想获取ID大于300000的用户的下一个条目:

SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 300000 LIMIT 1 (响应:~215ms


我尝试了几个索引,但没有一个减少响应时间:

ALTER TABLE table ADD INDEX (user_id, id);


在这种情况下如何提高性能?

假设 id 是你的 PRIMARY KEY,你应该创建这个索引:

ALTER TABLE table ADD INDEX (user_id);

并为您的查询添加 ORDER BY 条件:

SELECT  *
FROM    `table`
WHERE   `user_id` = 1
        AND `id` > 300000
ORDER BY
        id
LIMIT   1

索引实际上在 (user_id, id) 上,因为索引键中缺少的主键列隐式地是每个 InnoDB 二级索引的尾随部分。