2012-04-17 10 views
0

PostgreSQLにDjango 1.3アプリケーションと統合された7つのテーブルがあります。異なるカラムデータを持つすべてのテーブルに存在する名前に基づいてアクセスする7つのテーブルのうち、私の問題は、テーブル内の特定の名前データに属するすべての行を取得する必要があることです。djangoでPostgres DBクエリの検索効率

私は検索操作のためのdjangoモデルormクエリーセットを実装しました。しかし、効果的ではないようです。ページングを実行しても、すべてのテーブルのすべての列のインデックスを作成しても、 。

はまだ私は nginxの-504ゲートウェイタイムアウト

だから、私はあまりにも1,00,000行を介してすべてのテーブルから取得する必要があるクエリを最適化する必要が取得しています。

クエリの最適化を改善する方法は何ですか。

このような挑戦的な操作のために私はどのようにdjangoにアプローチしますか?ここで

私は私に正しい方向を示唆してくださいhttp://pastebin.com/yNy5pxGG

私のコードを貼り付け!

EDIT1:

マイクエリ: http://pastebin.com/A9B2ExVk

TABLES:これらは私の個々のテーブルと行counts.hereある私はLEFTがにすべてのJOINの

fda_sheet1 = 208778 unique rows 
fda_sheet2 = 291958 unique rows 
fda_sheet3 = 191958 unique rows 
fda_sheet4 = 676363 uniq rows 
fda_sheet5 = 262651 
fda_sheet6 = 742707 
fda_sheet7 = 300000 

を作っていますパフォーマンスのために1つのテーブルを作成します。

テーブルのサイズが700GBを超えているため、これもうまくいきません。

クエリを処理する方法は何ですか?

NOTES

これらのテーブルはdata.Mainlyの様々なレベルが含まれている私たちはISRが何我々はISRをフェッチする薬剤上の他のすべてのtables.Basedに存在することになる何.Also薬剤名およびISRを持っていませんいいえ、またISRを使用しないでください。他のテーブルの他のデータを照会します。あなたがボトルネック

ので

、テーブルを組み合わせる1.に理解してほしいことは、各テーブルの複数の行が同じISRなしているので、複数のテーブル間の問題を700ギガバイト

2.Queryingを横断するので、問題です。

あなたは他の最良の方法をお考えですか?

してください、あなたは私がこの問題を解決するために私達を提案

plzは知っている疑問を持っている場合。

+0

クエリプランナーの出力で低速SQLクエリの1つを投稿できますか? –

+0

@TommasoBarbugli私はクエリプランナーアルゴリズムまたはプレーンな生のSQLクエリを使用する必要がありますか? – Nava

+0

@サラバナ:私は他の誰も知らないが、SQLとSQLのEXPLAIN ANALYZEからの出力を見ることができれば、私は最も有益だろう。 – kgrittn

答えて

1

の後には、ページ番号を実行しています(listにキャスト)し、total_dataを作成しています。したがって、ページングが動作する前に、すべてのデータを取得してメモリに保存する必要があります。あなたはそれを避けるべきです。

また、1つのオブジェクトのデータが7つの異なるテーブルに分割されています.DjangoのORMには悪いです。データベーススキーマを変更できない場合は、データベースにビューを作成して、すべてを結合して1つのグランドテーブルをシミュレートします。

空のフィールドへのすべての参加とチェックはDBで行われますので、はるかに明確なPythonコードが得られ、はるかに高速に動作します。

関連する問題