2009-07-23 6 views
7

特にPostgresで高速なクエリを書くにはどうすれば効果的ですか?一般的に良いデータベースプラクティス(インデックスや正規化の使用など)は含めないでください。私は、抽出されたテーブルがサブクエリより速く動作するか、Pythonの文字列関数を使用するほうが、pgsql文字列関数よりも速く動作するようなヒントを探しています。理想的には、このリストには実際の例とアドバイスが含まれています。Postgres Tuning

ありがとうございました。

答えて

7

定期的に吸引してください。現在の自動真空管システムは、ほとんどの場合、これのかなり良い仕事をしていますが、定期的に完全な手動真空を行うことは依然として役立ちます(このケースでは、およそ1年に1回発生します)。

インデックスは、テーブルに統計情報がある場合にのみ信頼性をもって使用されます。テーブルの大きな変更(挿入/削除)を行った後、インデックスが適切に選択されていることを確認するために、真空解析が実行されていることを確認してください。

デフォルトのPostgres設定は、リソースが比較的少なく、ディスクが遅いシステム向けに最適化されています。あなたのシステムがより速いディスク(おそらく)、もっと速いCPU(たぶん)、またはもっと多くのRAM(ほぼ確実)を持っているなら、それに基づいてさまざまなパラメータを調整してください。主なものはバッファサイズを増やすことですが、非常に高速なディスク(特にSSD)を使用している場合は、シーク時間のコスト見積もりを低くすることをお勧めします。

かなり複雑なクエリでは、少し遅い結合でいくつかの経験がありましたが、これは一般化するのがはるかに難しいです。通常は、より洗練されたクエリオプティマイザ(OracleやDB2など)を使用しているデータベースで必要とされるものよりも、クエリの方が明示的に役立ちます。

+0

はい、私は気づいた自動真空は本当に毎日大量のデータロードを持つシステムとあまりうまく機能しませません。私たちは毎日少なくとも「分析する」。 –

8

私が今までに見つけた唯一の破られないルールは、破られないルールがないということです。

サブクエリが高速になることもあれば、ジョインが高速になることもあります。ときにはplpgsqlが必要な場合もありますが、時には他のpl/*が必要な場合もあります。

最も通常は、適切なアドバイス:

  1. は、あなたが(自動バキュームをオンに)掃除して分析を確認してください
  2. 使用することは、データベースとを果たし
  3. 、その出力をよく読むことを分析し、学ぶことを説明します。奇妙なことをやろうとする。通常は役に立ちません。しかし、時にはそれが、あなたは新しいトリックを学ぶ。