0

Django 1.3アプリケーションと統合されたPostgreSqlに7つのテーブルがあります.7つのテーブルのうち、異なる列データを持つすべてのテーブルに存在する名前に基づいてアクセスします.特定の名前には1,00,000行が含まれています.だから、私の問題テーブル内の特定の名前データに属するすべての行を取得する必要があります。

そのため、検索操作用にdjangoモデルormクエリセットを実装しましたが、効果的ではないようです。ページネーションを行い、すべてのテーブルのすべての列のインデックスを作成しても、ページをロードするのに非常に時間がかかります。

それでも私はnginx-504ゲートウェイタイムアウトを取得しています

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

クエリの最適化を改善するために必要な方法は何ですか?

このような困難な操作に対してdjangoでどのようにアプローチすればよいですか?

ここにコードを貼り付けましたhttp://pastebin.com/yNy5pxGG

正しい方向を教えてください!

EDIT1:

私のクエリ: http://pastebin.com/A9B2ExVk

表:

 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 つのテーブルを作成するために、すべての LEFT JOIN を作成しています。

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

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

:

これらのテーブルには、さまざまなレベルのデータが含まれています。主に、薬剤名と ISR 番号があります。また、ISR 番号は、他のすべてのテーブルに存在します。薬剤に基づいて、ISR 番号を取得し、ISR 番号を使用して他のデータを照会します。他のテーブルで。ボトルネックを理解していただければ幸いです

というわけで、 1.テーブルの組み合わせも問題 700GBを超えてから

2.複数のテーブルにまたがるクエリも問題です。各テーブルの複数の行には同じisr番号があるためです。

他に最善の方法はありますか?

ご不明な点がございましたら、お知らせください

plz これを修正するように提案してください。

4

1 に答える 1

1

すべてのクエリを評価し (にキャストlist) 、. total_dataそのため、ページネーションが機能する前に、すべてのデータを取得してメモリに配置する必要があります。それは避けるべきです。

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

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

于 2012-04-18T04:03:26.693 に答える