MySQL查询性能(InnoDB)

时间:2016-04-15 20:06:56

标签: mysql innodb

我有一个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);


如何在这种情况下改善表现?

1 个答案:

答案 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二级索引的尾随部分。