0

例如,我想订购一张这样的桌子

Foo | Bar
---------
 1  |  a
 5  |  d
 2  |  c
 1  |  b
 2  |  a

对此:

Foo | Bar
---------
 1  |  a
 1  |  b
 2  |  a
 2  |  c
 5  |  d

(按 Foo 列排序)

那是因为我只想选择具有给定 Foo 的 Bars,如果它已经被订购,我想它们会更快选择,因为我不必使用ORDER BY.

如果可能的话,一旦按 Foo 列排序,我想按 Bar 列对具有相同 Foo 的行进行排序。

当然,如果我INSERT还是UPDATE要表的话,应该保持有序。

4

1 回答 1

3

在 SQL 中,表本质上是无序的。这是数据库的一个非常重要的特性。例如,您可以删除表中间的一行,当插入新行时,它会占用已删除行所占用的空间。这比仅将行附加到数据末尾更有效。

换句话说,该order by子句基本上仅用于输出目的。好的,我可以想到另外两种情况。. . with limit(或相关子句)和 with 窗口函数(SQLite 不支持)。

在任何情况下,对数据进行排序对于这样的查询也无关紧要:

select bar
from t
where foo = $FOO

SQL 引擎不“知道”该表是有序的。因此,它将从表的开头开始,并对每一行进行比较。

提高效率的方法是在foo. 然后,您将能够获得您想要的效率。

于 2013-03-23T22:41:06.293 回答