基本的に3つのテーブルがあります。 1つはコアテーブル、もう1つは第1に依存します。私はすべてのテーブルに最大70000レコードを追加する必要があります。私はテーブルのために設定された制約(プライマリ&外部キー、インデックス、一意なものなど)を持っています。要件に標準の.csvファイルがないため、バルクインポート(COPYコマンドを使用)に行くことはできません。また、マッピングは明示的に必要とされ、Cベースのプログラミングファイルで外部からの検証はほとんど行われません。各レコードの詳細(最大70000)は、.pgc(ECPGベースのCプログラミングファイル)からpostgresqlファイルに渡されます。最初のいくつかのレコードでは時間がかからず、パフォーマンスは後者のレコードに悪くなっています。結果は非常に悲しい20000までカバーするまでに数日かかる!パフォーマンスの尺度は何ですか?私を案内してください。PostgreSQLの複数の挿入に最適化が必要
私のマスターテーブルのスキーマは
CREATE TABLE contacts
(contact_id SERIAL PRIMARY KEY
, contact_type INTEGER DEFAULT 0
, display_name TEXT NOT NULL DEFAULT ''
, first_name TEXT DEFAULT ''
, last_name TEXT DEFAULT ''
, company_name TEXT DEFAULT ''
, last_updated TIMESTAMP NOT NULL DEFAULT current_timestamp
, UNIQUE(display_name)
) WITHOUT OIDS;
(ほぼ)空のテーブルから開始するときに測定しましたか?あなたの挿入物は1つの大きな取引で行われていますか?もしそうなら、キャッシュされたクエリプランが悪くなった可能性があります。 –
個別の挿入を発行しても、20000行には日数がかかりません。大きなテーブルの場合でも、通常の挿入文を使用してラップトップに約5000行/秒を挿入できます。 –
Plsは以下のメンバーに私の返信を読んでいます。あなたは時間消費を最小限にする方法について私を導くことができますか?私はpostgresql 8.1.4を持っています。 Linux OS。私のマスターテーブルのスキーマは、TABLEの連絡先( \t \t 、\t SERIAL PRIMARY KEY、 \t CONTACT_TYPE \t INTEGERのDEFAULT 0をcontact_id DISPLAY_NAME \t TEXT、NOT NULL DEFAULT 'を作成'、 \t FIRST_NAME \t TEXTのDEFAULT ''、 \t LAST_NAME \t TEXTですDEFAULT ''、 \t COMPANY_NAME \t TEXTのDEFAULT ''、 \tはNULL DEFAULTのCURRENT_TIMESTAMPをlast_updatedです\t TIMESTAMP NOT、 \t UNIQUE(DISPLAY_NAME) )OIDSなし; – Siva