質問

PostgreSQLに基づいたデータウェアハウスがあります。

これまで、実際のデータベースのほんの一部を含むデータベースでクエリを実行しようとしていました。クエリをこの小さなテストデータベースに効率的にする方法でクエリを作成したら、実際のテストデータベースでクエリを実行します。

問題は、実際のデータベースでクエリを実行すると、実際のデータベースがメモリを使い果たし、インデックスやテンプテーブルのようなものをディスクに書き始めることです。これは、さまざまなクエリがテストデータベースと実際のデータベースに最適である可能性があることを意味します。これは、どのクエリが最適なものであるかを知るために完了するのに数分かかるクエリを実際に実行する必要があることを意味しますか?

役に立ちましたか?

解決

解釈する方法を学びます EXPLAIN 出力、次に確認します EXPLAIN 出力によると、大規模なデータベースで選択されたクエリプランは、クエリを実行する前に予想されるものと似ていることが示されています。

他のヒント

3つの質問:

1)クエリはどの程度複雑ですか?インデックスと温度テーブルの生成は、インデックスされていない列での複雑な操作のために、サーバーがこれらのものを生成する必要があることを示唆しています。これはどのくらいの可能性がありますか?あなたが報告するものから、それはおそらく答えが「複雑」であるように思われます

2)リターンセットの大きさはどれくらいですか?最終結果は100行ですか、それとも100万行ですか?あなたが報告するものから、答えは何でもかもしれません。この質問はそれほど重要ではないと思いますが、少なくとも知ることは重要です。

3)質問1を別の方法で言い換えて、返されたセットが小さい場合でも、小さな結果に向かう途中でコンパイルする必要がある大きな中間結果はありますか?繰り返しますが、ここでの答えは、大きな複雑な中間結果が生成されていることだと思います。

これは、少なくともいくつかのものをインデックス化する必要があることを示唆しており、おそらくあなたがクエリしようとしているものに近づくために、途中でデータを構成する必要があることを示唆しています。

最後の質問は、これがあなたのより重要なクエリのほとんどにとって、または1つまたは2つだけの普及した問題ですか?

コメントへの応答で編集: 私は一日中データウェアハウスのクエリを行い、それらのいくつかは10分ほどかかります。一部の時間には時間がかかりますが、私はそれらをバックグラウンドジョブに押し込み、すべてを停止するのを防ぐために段階に分割します。それが非常に大きなデータセットを処理する性質です。

元の答えでの私の質問は、問題の質問があるかどうかを理解することを目的としています これまで 終了。中間データを大量に生成するクエリを無意識のうちに書くことができます。ですから、私は元の3つの質問を言い換えます。実際、あなたの質問に完全に答える唯一の方法です。

要約:はい、一部のクエリにはずっと時間がかかります。それは獣の性質です。あなたが期待できる最善のことは、読み取られるデータの量に対してパフォーマンス線形であり、処理するために1億行がある場合、それは数秒ではなく数分かかります。しかし、さらに重要なことは、クエリが100万行で4秒で実行されますが、1億行に400秒(1時間のように)かかる場合、私が尋ねた元の質問は、最適化することを目的として、あなたが理由を理解するのに役立ちます。それらのクエリ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top