問題タブ [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.
sql - この SQL クエリを改善する方法
このクエリがあります
これは説明ですhttp://explain.depesz.com/s/dbf
このクエリの速度を改善するにはどうすればよいですか? インデックススキャンで9000回を超えるループがあることに注意してください
postgresql - 複数列のインデックスと並べ替えのパフォーマンスを向上させる
の出力EXPLAIN ANALYZE
:
しかし、注文を削除すると:
- コンポジット
btree index on (col1, col2)
と がありbtree index on col3
ます。 - 書き込みパフォーマンスとストレージは優先事項ではありません。読み取りパフォーマンスは最も重要であり、可能な限り高速である必要があります。
- これは、IN 句を使用したクエリをサポートできる必要があります:
WHERE (col1, col2) IN (($1, $2), ($3, $4)) ORDER BY col3 LIMIT 10;
。(ルックアップは常に IN 句を使用してから順序付けます。)
注: (col1、col2、col3) にインデックスを作成することは可能ですか? それは使用(col1, col2)
して検索し、col3
すでに注文しています...
sql - PostgreSQL ウィンドウ関数: 比較による分割
PostgreSQL クエリの WINDOW 関数の PARTITION BY 句で現在の行と比較する方法を見つけようとしています。
次のクエリに、この 5 つの要素の短いリストがあるとします (実際には、数千または数百万の行があります)。各行、次の異なる要素 (イベント列) の ID、および前の異なる要素の ID を取得しようとしています。
比較event!=ev.event
が正しくないことはわかっていますが、それが私が到達したいポイントです。
得られる結果は次のとおりです (PARTITION BY 句を削除した場合と同じです)。
そして、私が得たい結果は次のとおりです。
それが可能かどうか、そしてその方法を知っている人はいますか?どうもありがとうございました!
編集: aと aの 2 つJOIN
の s で実行できることはわかっていますが、実際には数百万行の場合、非常に非効率的です。ORDER BY
DISTINCT ON
postgresql - Postgres で空白で区切られた文字列を検索する
postgresにcharacter varying
、1 つの空白で区切られた一連の文字列を含むフィールドがあります。例えば:
--> one two three <--
--> apples bananas pears <--
-->
文字列の開始位置と終了位置を示すためにandを配置し<--
ました (これらは格納された文字列自体の一部ではありません)。
このフィールドにクエリを実行して、文字列全体に特定の単語 (リンゴなど) が含まれているかどうかを確認する必要があります。可能なクエリは
しかし、私の場合、検索された文字列はフィールドのどこにでも配置できますが、パターンが文字列の先頭にアタッチされている場合にのみ b ツリー インデックスがスケーリングされるため、それは最悪でスケーリングしません。
問題にどのようにアプローチすることをお勧めしますか?
postgresql - 異種データ型の 3 つのフィールドの複数列インデックス
3 つのフィールドを持つ postgres テーブルがあります。
- a : postgis ジオメトリ
- b : 配列 varchar[]
- c : 整数
そして、それらすべてを含むクエリがあります。高速化するために複数列のインデックスを追加したいのですが、その性質上、3 つのフィールドを同じインデックスの下に置くことができないため、できません。
この場合の戦略は何ですか?3つのインデックスgist、gin、btree、およびpostgresを追加すると、クエリ中にそれらすべてが使用されますか?
sql - PSQL クエリの実行時間を最適化する
query
実行時間が長いという問題に出くわしたのは初めてです。クエリが 20 秒以上実行されているため、問題は実際にはかなり大きく、エンドポイント ユーザーにとっては非常に目立ちます。
topics
私は(〜8k)の非常に大きなデータベースを持っており、トピックにはパラメーターがあります(これは辞書化されています-8kのトピックには113の異なるパラメーターがあります)。
それらの話題の繰り返し回数についてのレポートを示したいと思います。
と私のクエリ:
結果のフラグメント:
このクエリの実行時間を最適化する方法はありますか?
postgresql - PostgreSQL にインデックスを強制的に使用させる方法は?
事実:
product
テーブルには約 1 億件のレコードがあります- 少数の工場があります。たとえば、1 つの工場に 500 万個の製品があるとします。
- 何百万もの工場キーがあります
- 各ファクトリに関係のない行は少数です。たとえば、500 万個の製品を扱う工場があり、関連性のない製品が約 100 個あるとします。
- ただし、関係のない行が何百万行もあります。最も一般的なケースは、1 つのファクトリ キー、5 行の製品、おそらく 2 行の関連しないものです。
これは問題のクエリです:
説明分析:
問題:
これは次の理由で問題があります。
このファクトリに一致する行が非常に多いため、プランナーは seq スキャンを使用することを選択したと思います。(約 320 万行がこのファクトリまたは約 3% に一致します)
ただし、非常に少数の行のみが関連していないためです。そして、私は関連していないものを探しています。seq スキャンは非常に高価になります。
すでに複合インデックスproduct_factory_key_relevant_key
を作成しましたが、インデックスを利用していません。
編集:
postgres に複合キーの使用を強制しようとしています:product_factory_key_relevant_key
SET enable_seqscan=off
ただし、現在はインデックススキャンを使用しています。実際には、seqscan よりもまだ遅いです。(つまり、seq スキャンを実行するプランナーは正しかったと思います)