【发布时间】:2017-04-01 15:20:14
【问题描述】:
我有一个包含 1500 万行的 messages 表。
以下查询在不到 1 秒的时间内返回大约 500 万条(但限于 15 行)记录:
SELECT messages.* FROM messages
INNER JOIN gateways ON
messages.gateway_id=gateways.id
INNER JOIN orders ON
gateways.order_id=orders.id
WHERE orders.user_id=6500 AND messages.deleted=0
AND messages.type='Out' LIMIT 15;
但是当我在它的末尾添加一个Order ByidDESC 时,它会变得非常慢大约 40 秒:
SELECT messages.* FROM messages
INNER JOIN gateways ON
messages.gateway_id=gateways.id
INNER JOIN orders ON
gateways.order_id=orders.id
WHERE orders.user_id=6500 AND messages.deleted=0
AND messages.type='Out' ORDER BY messages.id DESC LIMIT 15;
任何帮助将不胜感激。
【问题讨论】:
-
您是否已经有一个按您需要的列按 DESC 顺序排列的索引?
-
是的,我在主键列(id)上
order by -
你得到了多少行(每个用户有多少行)?你能添加解释计划吗?为
order by使用id上的索引很可能不是一个好的选择,但无论如何MySQL 都可能会使用它。您可能需要一个子查询。 -
请提供
SHOW CREATE TABLE。 -
“返回 500 万条记录”,
LIMIT 15。出了点问题。请修复。
标签: mysql performance query-optimization database-performance