如何使用排序索引来提高 ORDER BY 性能?

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

我正在努力最小化

ORDER BY
的开销。我的理解是:

SELECT gorilla, chimp FROM apes ORDER BY bananas DESC LIMIT 10;

ORDER BY
之前检索完整的匹配记录集,即使我只想要前十条记录。为了消除这种开销,我考虑以预定义的顺序存储,但这只能在发生插入/删除之前有效(不可行)。

我找到了排序索引

CREATE INDEX index_name ON apes (bananas DESC);

我假设按降序对索引(而不是表)进行排序,并且在更新后仍然如此。我该如何利用这个?有某种

SELECT FROM index
吗?排序索引是否会按照索引的顺序而不是列的顺序返回结果?或者我完全错过了什么?

我正在使用 SQLite3,由 PHP 7.1 查询。

sql sqlite sorting indexing sql-order-by
1个回答
3
投票

带有 LIMIT 的 ORDER BY 比普通 ORDER BY 更高效,因为只有前几行需要完全排序。

无论如何,对于单列索引,排序顺序(ASC 或 DESC)是没有意义的,因为 SQLite 可以向前或向后单步遍历索引。

当 SQLite 估计索引有用时,索引会自动使用。 要检查实际发生的情况,请运行 EXPLAIN QUERY PLAN(或在

.eqp on
shell 中设置
sqlite3
)。

© www.soinside.com 2019 - 2024. All rights reserved.