SQLite 查询使用 TEMP B-TREE FOR ORDER BY 而不是索引

问题描述 投票:0回答:1

我有一个非常简单的表,其中包含 2 列,

message_id
server_timestamp
,但是当我查看此查询的计划时:

sqlite> explain query plan select message_id, server_timestamp from messages group by message_id order by server_timestamp;
selectid|order|from|detail
0|0|0|SCAN TABLE messages USING COVERING INDEX index_messages_id_server_timestamp
0|0|0|USE TEMP B-TREE FOR ORDER BY

其中

index_messages_id_server_timestamp
(message_id, server_timestamp)
上的索引。

为什么这个查询需要使用临时 B 树进行排序?

sqlite sorting indexing query-planner
1个回答
6
投票

由于 GROUP BY,表的多行可能会导致输出中只有一行。这破坏了

message_id
server_timestamp
值之间的关系,因此不再能够证明使用索引对它们进行排序是有效的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.