2

我有一个非常简单的表,其中包含 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 树进行排序?

4

1 回答 1

2

由于 GROUP BY,表的多行可能会导致输出中的单行。message_id这破坏了和值之间的关系server_timestamp,因此不再可能证明使用索引对它们进行排序是有效的。

于 2016-07-12T07:57:44.600 回答