SQLite - 利用排序索引

时间:2018-01-28 15:20:44

标签: sorting indexing sqlite sql-order-by

这可能很简单,但我找不到答案。

我正在努力减少使用ORDER BY

选择记录的开销

我的理解是......

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

...检索完整的匹配记录集,以便即使我只想要前十条记录,也可以对ORDER BY进行操作。这是有道理的。

试图消除这种开销,我研究了以预定义的顺序存储记录的可能性,但这只会在插入/删除发生之前有效,我将不得不重新构建表。不可行。

我在SQLite中找到了一个选项(我假设它也存在于其他SQL中)来创建一个排序索引(https://www.sqlite.org/lang_createindex.html)......

CREATE INDEX index_name ON apes (bananas DESC);

...我 ASSUME 表示索引(不是表格)按降序排序,并在更新后保持不变。

我的问题是 - 我如何利用这个?在这方面,SQLite文档有点meh。是否存在某种“SELECT FROM index”或等价物?或者列上存在排序索引的事实意味着查询该列的任何结果都将按索引的顺序而不是列的顺序返回?

或者我完全错过了什么?

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

1 个答案:

答案 0 :(得分:0)

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

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

当SQLite估计它们有用时,会自动使用索引。 要检查实际发生的情况,请运行EXPLAIN QUERY PLAN(或在.eqp on shell中设置sqlite3)。