【问题标题】:SQLite - Exploiting Sorted IndexesSQLite - 利用排序索引
【发布时间】:2018-07-07 08:37:57
【问题描述】:

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

我正在尝试尽量减少使用 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);

...我假设表示索引(而不是表)按降序排序,并且在更新后将保持如此。

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

还是我完全错过了什么?

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

【问题讨论】:

    标签: sorting indexing sqlite sql-order-by


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-12
      • 2016-12-01
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多