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