問題タブ [postgresql-performance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
111 参照

sql - この SQL クエリを改善する方法

このクエリがあります

これは説明ですhttp://explain.depesz.com/s/dbf

このクエリの速度を改善するにはどうすればよいですか? インデックススキャンで9000回を超えるループがあることに注意してください

0 投票する
1 に答える
884 参照

postgresql - 複数列のインデックスと並べ替えのパフォーマンスを向上させる

の出力EXPLAIN ANALYZE:

しかし、注文を削除すると:

  1. コンポジットbtree index on (col1, col2)と がありbtree index on col3ます。
  2. 書き込みパフォーマンスとストレージは優先事項ではありません。読み取りパフォーマンスは最も重要であり、可能な限り高速である必要があります。
  3. これは、IN 句を使用したクエリをサポートできる必要があります: WHERE (col1, col2) IN (($1, $2), ($3, $4)) ORDER BY col3 LIMIT 10;。(ルックアップは常に IN 句を使用してから順序付けます。)

注: (col1、col2、col3) にインデックスを作成することは可能ですか? それは使用(col1, col2)して検索し、col3すでに注文しています...

0 投票する
1 に答える
8206 参照

sql - PostgreSQL ウィンドウ関数: 比較による分割

PostgreSQL クエリの WINDOW 関数の PARTITION BY 句で現在の行と比較する方法を見つけようとしています。

次のクエリに、この 5 つの要素の短いリストがあるとします (実際には、数千または数百万の行があります)。各行、次の異なる要素 (イベント列) の ID、および前の異なる要素の ID を取得しようとしています。

比較event!=ev.eventが正しくないことはわかっていますが、それが私が到達したいポイントです。

得られる結果は次のとおりです (PARTITION BY 句を削除した場合と同じです)。

そして、私が得たい結果は次のとおりです。

それが可能かどうか、そしてその方法を知っている人はいますか?どうもありがとうございました!

編集: aと aの 2 つJOINの s で実行できることはわかっていますが、実際には数百万行の場合、非常に非効率的です。ORDER BYDISTINCT ON

0 投票する
1 に答える
2754 参照

postgresql - Postgres で空白で区切られた文字列を検索する

postgresにcharacter varying、1 つの空白で区切られた一連の文字列を含むフィールドがあります。例えば:

  • --> one two three <--
  • --> apples bananas pears <--

-->文字列の開始位置と終了位置を示すためにandを配置し<--ました (これらは格納された文字列自体の一部ではありません)。

このフィールドにクエリを実行して、文字列全体に特定の単語 (リンゴなど) が含まれているかどうかを確認する必要があります。可能なクエリは

しかし、私の場合、検索された文字列はフィールドのどこにでも配置できますが、パターンが文字列の先頭にアタッチされている場合にのみ b ツリー インデックスがスケーリングされるため、それは最悪でスケーリングしません。

問題にどのようにアプローチすることをお勧めしますか?

0 投票する
2 に答える
7470 参照

postgresql - 異種データ型の 3 つのフィールドの複数列インデックス

3 つのフィールドを持つ postgres テーブルがあります。

  • a : postgis ジオメトリ
  • b : 配列 varchar[]
  • c : 整数

そして、それらすべてを含むクエリがあります。高速化するために複数列のインデックスを追加したいのですが、その性質上、3 つのフィールドを同じインデックスの下に置くことができないため、できません。

この場合の戦略は何ですか?3つのインデックスgist、gin、btree、およびpostgresを追加すると、クエリ中にそれらすべてが使用されますか?

0 投票する
3 に答える
44 参照

sql - PSQL クエリの実行時間を最適化する

query実行時間が長いという問題に出くわしたのは初めてです。クエリが 20 秒以上実行されているため、問題は実際にはかなり大きく、エンドポイント ユーザーにとっては非常に目立ちます。

topics私は(〜8k)の非常に大きなデータベースを持っており、トピックにはパラメーターがあります(これは辞書化されています-8kのトピックには113の異なるパラメーターがあります)。

それらの話題の繰り返し回数についてのレポートを示したいと思います。

と私のクエリ:

結果のフラグメント:

このクエリの実行時間を最適化する方法はありますか?

0 投票する
2 に答える
13893 参照

postgresql - PostgreSQL にインデックスを強制的に使用させる方法は?

事実:

  1. productテーブルには約 1 億件のレコードがあります
  2. 少数の工場があります。たとえば、1 つの工場に 500 万個の製品があるとします。
  3. 何百万もの工場キーがあります
  4. 各ファクトリに関係のない行は少数です。たとえば、500 万個の製品を扱う工場があり、関連性のない製品が約 100 個あるとします。
  5. ただし、関係のない行が何百万行もあります。最も一般的なケースは、1 つのファクトリ キー、5 行の製品、おそらく 2 行の関連しないものです。

これは問題のクエリです:

説明分析:

問題:

これは次の理由で問題があります。

  1. このファクトリに一致する行が非常に多いため、プランナーは seq スキャンを使用することを選択したと思います。(約 320 万行がこのファクトリまたは約 3% に一致します)

  2. ただし、非常に少数の行のみが関連していないためです。そして、私は関連していないものを探しています。seq スキャンは非常に高価になります。

すでに複合インデックスproduct_factory_key_relevant_keyを作成しましたが、インデックスを利用していません。

編集:

postgres に複合キーの使用を強制しようとしています:product_factory_key_relevant_key

SET enable_seqscan=off

ただし、現在はインデックススキャンを使用しています。実際には、seqscan よりもまだ遅いです。(つまり、seq スキャンを実行するプランナーは正しかったと思います)