我有一个InnoDB
表,大约有50MB(约500,000个条目)。
表格结构: id user_id info
Querys:
我想获得ID高于10的用户的下一个条目:
SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 10 LIMIT 1
(回复:~0.5ms)
我想获得ID高于300000的此用户的下一个条目:
SELECT * FROM `table` WHERE `user_id`=1 AND `id` > 300000 LIMIT 1
(回复: ~215ms )
我尝试了几个索引,但没有人减少响应时间:
ALTER TABLE table ADD INDEX (user_id, id);
如何在这种情况下改善表现?
答案 0 :(得分:0)
如果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二级索引的尾随部分。