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 を持つバーのみを選択したいためです。既に注文されている場合は、使用する必要がないため、選択する方が速いと思いますORDER BY

可能であれば、列 Foo で並べ替えたら、同じ Foo を持つ行を Bar 列で並べ替えたいと思います。

もちろん、私INSERTまたはUPDATEテーブルにいる場合は、注文したままにする必要があります。

4

1 に答える 1

3

SQL では、テーブルは本質的に順不同です。これはデータベースの非常に重要な特性です。たとえば、テーブルの途中で行を削除できます。新しい行が挿入されると、削除された行が占めていたスペースが使い果たされます。これは、データの最後に行を追加するよりも効率的です。

つまり、order by句は基本的に出力目的でのみ使用されます。わかりました、他に 2 つの状況が考えられます。. . (または関連するlimit節) およびウィンドウ関数 (SQLite ではサポートされていません) を使用します。

いずれにせよ、次のようなクエリでは、データの順序付けも重要ではありません。

select bar
from t
where foo = $FOO

SQL エンジンは、テーブルが順序付けられていることを「認識」していません。したがって、テーブルの先頭から開始し、各行の比較を行います。

これをより効率的にする方法は、 にインデックスを作成することfooです。その後、必要な効率を得ることができます。

于 2013-03-23T22:41:06.293 に答える