2017-05-05 9 views
0

私は100000以上の行を持つテーブルを持っていて、私は姓と名字をアルファベット順に並べ替える必要があります。私はインデックスを使用して並べ替えを実現したいです。私はこれを試しました:インデックスを使用したpostgresqlのアルファベット順のソート。

CREATE INDEX idx0 ON "People"(surname,name DESC NULLS LAST); 

しかし、テーブルが正しくソートされていません。私は間違って何をしていますか?

+1

インデックスは、検索と注文を高速化します。ただし、物理表の順序は変更されません。私は 'ORDER BY'節を追加する必要があります。 – jarlh

+1

表は*順序付けられていない*集合を表します。結果を特定の順序で欲しい場合は、クエリで 'order by'を使う必要があります。 –

+0

あなたは 'CLUSTER'コマンドを探していますか?それは一度の操作であることを覚えておいてください - 後で行は再びソートされます –

答えて

0

あなたがこの順でテーブルからデータを選択したい場合は、クエリを実行する必要があります。

SELECT * FROM People ORDER BY surname, name DESC NULLS LAST 

データベースは、インデックスの代わりに、その場でデータをソート(ノートを使用しますので、このクエリは、高速で実行されますクエリのORDER BYの列と並べ替えの方向が、インデックスの列と並べ替えの方向と正確に一致する場合にのみ機能します)。

あなたは物理的にテーブル内のデータを並べ替えしたい場合は、実行することができます。

CLUSTER People USING idx0 
をしかし CLUSTERコマンドは、既存のデータを並べ替えますことを心に留めておきます。新しいデータをテーブルに挿入すると、それは望みの順序で配置されないので、 CLUSTERコマンドを再度実行する必要があります。

関連する問題