【发布时间】:2017-10-13 05:34:37
【问题描述】:
请考虑一个包含queue_name、priority 和message_timestamp 列的表。
我将执行以下查询:
SELECT message_timestamp
from queue_messages
WHERE queue_name = 'name'
AND state = 0
ORDER
BY message_timestamp DESC
LIMIT 1
这是一个复合索引:
CREATE INDEX STATE_QUEUENAME_TIMESTAMP ON `queue_messages` (queue_name, state, message_timestamp);
EXPLAIN 显示索引与查询匹配得很好(ORDER BY 没有文件排序):
我的问题是,如果没有 ORDER BY message_timestamp,这个查询的吞吐量约为 200 prs,但有 ~50 rps!
表中的行越多,ORDER BY 的查询速度就越慢!
我做错了什么?
【问题讨论】:
-
好吧,如果
order by会降低大表的查询性能,这是意料之中的。
标签: mysql indexing sql-order-by mariadb