MySQL:ORDER BY大大降低了查询速度 请考虑一个带有 QuealEngEng/、优先级和 MeasaGeD时间戳< /代码>栏> 表。

MySQL:ORDER BY大大降低了查询速度 请考虑一个带有 QuealEngEng/、优先级和 MeasaGeD时间戳< /代码>栏> 表。,mysql,indexing,sql-order-by,mariadb,Mysql,Indexing,Sql Order By,Mariadb,我将执行以下查询: 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, messag

我将执行以下查询:

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显示索引与查询匹配得非常好(没有按排序的文件排序):

我的问题是,如果没有
orderbymessage\u timestamp
,我的查询吞吐量约为200卢比,但有了它,吞吐量约为50卢比

表中的行越多,使用
按顺序查询的速度越慢


我做错了什么?

确实,ORDER BY子句会降低查询的性能,因为数据库需要在给出最终输出之前缓冲中间结果

原因:无法以流水线方式执行排序操作。在产生输出之前,必须完全读取输入


ORDERBY子句的替代方法可以是索引。索引使数据保持有序,这就减少了按ORDER BY子句排序的开销

确实,ORDER BY子句会降低查询的性能,因为数据库需要在给出最终输出之前缓冲中间结果

原因:无法以流水线方式执行排序操作。在产生输出之前,必须完全读取输入

ORDERBY子句的替代方法可以是索引。索引使数据保持有序,这就减少了按ORDER BY子句排序的开销

(除了哈希塔的回答:)

如果添加
索引(队列\u名称、状态、消息\u时间戳)
,则无论是否使用
ORDER BY
,查询速度都会更快

请注意,该复合索引处理所有的
WHERE
过滤,并且仍然有
ORDER BY
列用于处理
ORDER BY
LIMIT

更多

EXPLAIN
显示了该索引的使用;此外,它还说“使用索引”。这意味着索引是“覆盖”的,这意味着查询完全在索引中执行,不需要接触数据

我希望无论您是否拥有按订购的订单,
解释
都是一样的。是吗

什么是“prs”?“rps”?也许是“每秒请求数”?取决于其他情况以及缓冲池中的块缓存。50-200的变化似乎是合理的。是否有多个线程到达下一个项目?是否有
更新
删除
您没有提到在找到项目后“删除”该项目?这将比
选择产生更大的影响
;我们应该同时讨论这个问题

如果将表用作队列,最终会遇到性能不佳的情况。我的口头禅是:“不要排队,做就行了。”

(除了哈希塔的回答:)

如果添加
索引(队列\u名称、状态、消息\u时间戳)
,则无论是否使用
ORDER BY
,查询速度都会更快

请注意,该复合索引处理所有的
WHERE
过滤,并且仍然有
ORDER BY
列用于处理
ORDER BY
LIMIT

更多

EXPLAIN
显示了该索引的使用;此外,它还说“使用索引”。这意味着索引是“覆盖”的,这意味着查询完全在索引中执行,不需要接触数据

我希望无论您是否拥有按订购的订单,
解释
都是一样的。是吗

什么是“prs”?“rps”?也许是“每秒请求数”?取决于其他情况以及缓冲池中的块缓存。50-200的变化似乎是合理的。是否有多个线程到达下一个项目?是否有
更新
删除
您没有提到在找到项目后“删除”该项目?这将比
选择产生更大的影响
;我们应该同时讨论这个问题


如果将表用作队列,最终会遇到性能不佳的情况。我的口头禅是:“不要排队,就这么做吧。”

好吧,如果
orderby
降低了大表的查询性能,这是意料之中的事。好吧,如果
orderby
降低了大表的查询性能,这是意料之中的事。对不起,你说的是我在问题中描述的同一个索引吗,或者我遗漏了什么?更多的讨论,还有更多的问题需要你回答。对不起,你说的是我在问题中描述的同一个索引,还是我遗漏了什么?更多的讨论,还有更多的问题需要你回答。