Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting SQLite-利用排序索引_Sorting_Indexing_Sqlite_Sql Order By - Fatal编程技术网

Sorting SQLite-利用排序索引

Sorting SQLite-利用排序索引,sorting,indexing,sqlite,sql-order-by,Sorting,Indexing,Sqlite,Sql Order By,这可能很简单,但我找不到答案 我正在尝试使用ORDER BY最小化选择记录的开销 我的理解是 SELECT gorilla, chimp FROM apes ORDER BY bananas LIMIT 10; …检索完整的匹配记录集,以便可以执行ORDER BY,即使我只需要前十条记录。这是有道理的 为了消除这种开销,我考虑了以预定义顺序存储记录的可能性,但这只在插入/删除发生之前有效,我必须在此基础上重新构建表。不可行 我在SQLite中找到了一个创建排序索引()的选项(我假设它也存在于其

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

我正在尝试使用ORDER BY最小化选择记录的开销

我的理解是

SELECT gorilla, chimp FROM apes ORDER BY bananas LIMIT 10;
…检索完整的匹配记录集,以便可以执行ORDER BY,即使我只需要前十条记录。这是有道理的

为了消除这种开销,我考虑了以预定义顺序存储记录的可能性,但这只在插入/删除发生之前有效,我必须在此基础上重新构建表。不可行

我在SQLite中找到了一个创建排序索引()的选项(我假设它也存在于其他SQL中)

…我假设意味着索引(而不是表)按降序排序,并在更新后保持降序

我的问题是-我如何利用这一点?SQLite文档在这方面稍有不足。是否有某种“从索引中选择”或类似的方法?或者,列上存在排序索引这一事实是否意味着查询该列的任何结果都将按照索引的顺序而不是列的顺序返回

还是我完全错过了什么


我使用的是SQLite3,由PHP7.1查询,ORDERBY with LIMIT比普通ORDERBY更高效,因为只有前几行需要完全排序

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

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

CREATE INDEX index_name ON apes (bananas DESC);