2012-01-17 22 views
1

私はPostgreSQL上で動作するデータベースレイアウトを設計中です。このデータベースでは、私はたくさんのアドレスを扱う必要があるので、私は自然にアドレステーブルを使い、それから私の他のデータをプライマリキーを指すようにしたい。PostgreSQLの大きなテーブルのSELECT/INSERTパフォーマンス?

私はアドレスを一意にしたいので、単純なプライマリキーとすべてのデータ列のユニークなインデックスを使用する予定です。この線に沿って

何か:

CREATE TABLE address(id serial NOT NULL, name VARCHAR(32), address1 VARCHAR(32), address2 VARCHAR(32), postal VARCHAR(12), city VARCHAR(64), CONSTRAINT pkey PRIMARY KEY (id), CONSTRAINT unq UNIQUE (name,address1,address2,postal,city)); 

私は初日からこのテーブルでも200万個のエントリがあることを期待しています。

テーブルには、多くの同時選択が加えられ、いくつかの挿入が行われます。しかし、データの整合性を保つために、表にはUPDATESまたはDELETESは表示されません。

この種のテーブルでは、どのようなパフォーマンスが期待できますか?データを必要な場所にコピーするのではなく、大きなテーブルを使用するとパフォーマンスが低下することはありますか?

+1

簡単にテストできます。彼らは(慎重なスクリプトによって、またはソート-u' 'のいずれかによって)ユニークだことを確認し、ランダムな文字列を2万セットを生成するためにあなたの好きなスクリプト言語を使用してデータベースにロードします。テストの場合、住所が住所のように見えるかどうかは関係ありません。 –

答えて

1

それはときに、大きな数ではありませんPostgreSQLのために一般的に2万行...このクエリがあなたのマシンで、各クエリのために使用することができる良い指標があるどのように強い、となりますどのように多く依存しますクエリ結果はインデックスによって制限され、特にプライマリキーによる検索は効率的です。

ただし、最初にワイルドカードを使用してLIKEを検索すると、パフォーマンス上の問題が発生します。

+1

9.1ので、PostgreSQLはLIKE'動作 'のためにインデックスを使用することが可能であり、参照:http://www.depesz.com/index.php/2011/02/19/waiting-for-9-1-faster-likeilike/ –

+0

GIN指数は面白いと聞こえます...私は病気がちょうどいくつかのテストを実行し、自分のために参照する必要がありますね。 – aneez

関連する問題