2

グラフで構成されたデータベースがあります。アクセスする必要のあるテーブルは次のようになります。

Sno    Source    Dest
1       'jack'   'bob'
2       'jack'   'Jill'
3       'bob'    'Jim'

これSnoが主キーです。ソースと宛先は、グラフ内のノード間のエッジを表す2つの一意でない数値です。私SourceDestは文字列である可能性があり、必ずしも数値データ型である必要はありません。データベースには約500万のエントリがあり、Python用のPsycopg2でPostgresqlを使用して構築しました。

主キーのクエリは非常に簡単で迅速です。destただし、特定のソースが接続されているすべてについて、このデータベースに頻繁にクエリを実行する必要があります。今、私はクエリを呼び出すことによってこれを達成します:

SELECT * FROM name_table WHERE Source = 'jack'

これは非常に非効率的であり(クエリごとに最大2秒)、一意ではないため、これを主キーにする方法はありません。これらの繰り返される値に基づいてインデックスを作成し、それをすばやくクエリする方法はありますか?

4

1 に答える 1

4

これにより、クエリがはるかに高速になります。

CREATE INDEX table_name_index_source ON table_name Source;

ただし、使用できるオプションはたくさんあります

PostgreSQLドキュメント

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]
    ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace ]
    [ WHERE predicate ]

PostgreSQLを使用したインデックス作成の詳細については、ドキュメントを参照してください。

アップデート

あなたのテーブルがあなたのものと同じくらい小さいなら、これは確かに助けになるでしょう。ただし、データセットが大きくなっている場合は、スキーマの変更を検討して、より効率的にインデックスを作成できる一意の値を設定する必要があります。

于 2012-07-19T20:06:27.557 に答える