7

enable_seqscanクエリの1つ(Postgres)でいくつかのテストを行った後、=をオフに設定すると、クエリが元の時間の3分の1かかることに気付きました(psqlコンソールとを使用して実行EXPLAIN ANALYZE

OFFサーバー全体でこの設定を変更することはお勧めできませんので、このクエリに対してのみ設定したいと思います。
どうすればいいですか?出来ますか?

私の実装は、DBオブジェクト(DB :: select)を使用してクエリを実行するフレームワークKohana(PHP)に基づいています。

私のpostgresはCentOSLinuxでは8.4.9です。

4

1 に答える 1

11

SET LOCALそのためのトランザクションで使用できます。マニュアルを引用します:

SET LOCALコミットされているかどうかに関係なく、現在のトランザクションが終了するまでのみの効果が持続します。

しかし、それは原因を見つける代わりに、病気が続くときに抗生物質を食べるようなものです. 通常、プランナーが次善の計画を選択するのには理由があります。それを見つけて修正する必要があります。見る:

の設定を低くするとrandom_page_costうまくいくと思います。通常、デフォルト設定は保守的すぎます (高すぎます)。DB の大部分またはすべてがキャッシュされている場合 (システム キャッシュは、繰り返し使用されて RAM に収まるものに対してキャッシュを行います) random_page_costseq_page_cost. random_page_costインデックスの使用コストを計算する際の主要な要素です。

autovacuumが実行されていて、適切に構成されていることを確認してください( と を処理VACUUMしますANALYZE)。適切なクエリ計画を立てるには、列の統計を最新にする必要があります。

そしてeffective_cache_size、通常、箱から出してすぐに低すぎる設定になっています。

例外が適用され、特に古いバージョンでは、クエリ プランナーがそれを取得できないことがあります。これは、ここで別のデリケートなポイントにつながります: PostgreSQLの現在のバージョンにアップグレードします。あなたのものは古くなっています。

于 2013-03-01T20:04:05.640 に答える