【问题标题】:Sort order for sqlite indexsqlite索引的排序顺序
【发布时间】:2017-07-13 17:56:26
【问题描述】:

为 sqlite 创建索引时有排序顺序。

https://sqlite.org/lang_createindex.html

每个列名或表达式可以后跟“ASC”或“DESC”关键字之一以指示排序顺序。

所以,在创建索引时,有三个选项:no-sort、ASC、DESC。我应该如何使用它们的信息在哪里?我找不到它。

我想,如果我在查询中使用 ASC 或 DESC,我应该将它们添加到索引中。但是,如果它们都在不同的查询中,我应该同时添加它们吗?还是我不应该设置排序顺序,它会自己选择它?

它的一般规则是什么?

【问题讨论】:

  • “同时添加”是什么意思?我无法想象这样做的语法。 "后面可以跟其中一个
  • @Yunnosch,一个一个,两个不同的索引,一个是ASC,一个是DESC(第三个是没有排序的?)

标签: sqlite sorting indexing


【解决方案1】:

SQLite 可以双向扫描索引。对于单个列上的索引,这意味着它可以用于以ASCDESC 的顺序进行排序。

Reference:

Idx1 索引从上到下(如果使用“ORDER BY fruit DESC”,则从下到上)扫描,以便按水果顺序查找每个项目的 rowid。

但是对于多于一列的索引,可能希望对数据进行排序的方向不止两个。例如,在一个两列索引上,可能希望通过ASC, ASC 进行排序; ASC, DESC; DESC, DESC;或DESC, ASC 订购。

如果索引是按ASC, ASC的顺序创建的,那么按ASC, ASCDESC, DESC排序就能充分利用索引。但是仅使用索引无法按ASC, DESCDESC, ASC 进行排序。这就是为什么可以指定索引顺序的原因。

欲了解更多信息:https://use-the-index-luke.com/sql/sorting-grouping/order-by-asc-desc-nulls-last

【讨论】:

    【解决方案2】:

    SQLite 可以双向遍历索引,所以一般来说,索引顺序并不重要。

    【讨论】:

    • 为什么会出现在这里?
    • 我不确定;后退的功能可能是后来添加的。
    猜你喜欢
    • 2018-07-07
    • 2018-08-25
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多