問題タブ [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 投票する
2 に答える
2437 参照

sql - PostgreSQLが小さなテーブルでインデックスを使用しないのはなぜですか?

PostgreSQLには次のテーブルがあります。

私は次の選択を行います:

実行計画の説明は次のようになります。

私が理解している限り、これは全表スキャンです。問題は、なぜ私のインデックスが使用されないのかということです。

おそらく、その理由は、テーブルの行が少なすぎるためですか?私はそれらを20個しか持っていません。インデックスの問題を確認するためにテーブルにランダムデータを簡単に入力するためのSQLステートメントを提供していただけますか?

私はこの記事を見つけました:http://it.toolbox.com/blogs/db2luw/how-to-easily-populate-a-table-with-random-data-7888、しかしそれは私にとってはうまくいきません。ステートメントの効率は重要ではなく、単純さだけが重要です。

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

postgresql - PostgreSQL がインデックスを使用して、特定の照合順序でテキスト プレフィックス検索を実行しないのはなぜですか?

検討:

Postgres はその検索を行うためにインデックスを使用しません。collat​​ion を使用する場合"POSIX"、Postgres はインデックスを使用します: http://sqlfiddle.com/#!12/ed1cc/1

collat​​ion を使用する場合"en_US"、Postgres は順次スキャンを使用します: http://sqlfiddle.com/#!12/efb18/1

違いはなぜですか?

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

sql - 乗算結合クエリを最適化するには?

そんな問い合わせが来ました

そして、共通して、このような 9 ~ 10 の結合があります。そして、それは非常に遅く実行されます。person_func(person_id)、person_location(person_id) にインデックスを追加しましたが、役に立ちませんでした。最適化するにはどうすればよいですか?

例 - SQLFiddle の例

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

postgresql - 過去Xか月以内のPostgreSQL累積カウント

次の表があるとします。

各(user_id、month_d)ペアの過去6か月の累積カウントを照会したいと思います。私は次のJOINでそれを行うことができます:

しかし、これはウィンドウ関数で解決できるのだろうか?

サンプルデータ:

期待される結果(上記の結合から):

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

postgresql - ST_Contains() による遅い更新

上記のコードを使用すると、正確な都市を GPS ポイントに追加できます。5,000 万行で約 45 ~ 50 分実行されます。"city" テーブルには、チェックする必要がある約 4000 の都市があります。

特定の国 (1 つの国のみ) に 19 の郡を含む別のシェイプ ファイルがあります。郡をポイントに追加するには、約 1.5 時間かかります。

52 の EU 諸国を含む 3 番目のシェイプ ファイルがあります。同じ SQL クエリでほぼ 25 時間実行されます。

すべてのテーブルには、geom ごとに次のようなインデックスがあります。

Q : チェックするポリゴン数が少ないのになぜこんなに遅いのですか?

説明する 分析する:

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

sql - BETWEEN 日付ステートメントの最適化

フィールドでBETWEEN句を使用する PostgreSQL クエリを最適化するのに助けが必要です。timestamp

私は2つのテーブルを持っています:

約 3394 行を含む

約4000000行を含む

id_onePKとid_twoの両方、FKid_oneとに btree インデックスがありますcut_time

次のようなクエリを実行したい:

このクエリは、約 7 秒で約 1.700.000 行を取得します。

Explain Analyse レポートの下に、次のレポートが表示されます。

タイムスタンプ列のインデックスは使用されません。このクエリを最適化する方法は?

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

sql - SQL ウィンドウ関数 - SELECT DISTINCT ORDER BY LIMIT

PostgreSQL データベースに次の 3 つのテーブルがあります。

  • アーティスト: ID、名前
  • アルバム: id、タイトル、年、artist_id
  • 曲: id、タイトル、album_id

基本的に各アーティストには複数のアルバムがあり、各アルバムには複数の曲があります。

私のクエリは、タイトルが「The」で始まる曲を持つ 25 個の異なる artist.id を、アルバムの年順に正しく返します。

ただし、最も内側のクエリには LIMIT がないため、テーブル全体で可能なすべての一致を検索するため、遅くて非効率的です。理想的には、25 個の異なる artist.id が見つかったときに検索を停止します。

このクエリを書き直すか最適化して、より高速に実行できますか?

ここでウィンドウ関数を使用すると速度が向上すると思いますが、機能するものを見つけることができませんでした。

ありがとう!

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

sql - Postgre で大きな INSERT を実行した後のクエリが遅い

RedHat で Postgres 9.2 を使用しています。次のような表があります。

バッチ ジョブの一部として、最初に新しい BULK_ID を使用してテーブルに多数の行を追加します。新しいレコードはすべて CHUNK_ID = NULL、STATE = 'PENDING' です。挿入は 500K ~ 1.5M 行です。これが発生したときのテーブルのサイズは、15M レコードを超えます。

挿入後、チャンクでテーブルの処理を開始します。これを行うには、最初に次のチャンクのアイテムをいくつか選択してから、それらを処理します。アイテムの選択は、次のクエリで行われます。

$1はチャンクの反復ごとに増加し、$2$3は常に同じ (挿入された BULK_ID)、$4は通常 2,000 から 10,000 の間です。

問題は、最初の数チャンクの更新に時間がかかることです。たとえば、制限が 2000 の場合、ほとんどの更新は 1 秒未満で発生しますが、最初の数回は 2 分以上かかります。

これがなぜ起こるのか、そしてそれを修正する方法を理解しようとしています。ドキュメントを読んだ後:

データ ページの一貫性を確保するために、各チェックポイントの後にデータ ページを最初に変更すると、ページ コンテンツ全体がログに記録されます。

チェックポイントと WAL に関連していると思われますが、突き止めることはできませんでした。

助言がありますか?

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

postgresql - この関数が指数関数的に高価になるのはなぜですか?

一連の動的クエリを実行してループする関数を作成すると、処理時間が指数関数的に大きくなるようです。例として、次のコードを使用します。コードでexecuteステートメントを使用する必要があることに注意してください。

for ステートメントが 10 回ループすると、完了するまでに 125 ミリ秒かかります。私の for ステートメントが 100 回ループすると、完了するまでに 4,250 ミリ秒かかります。

100x のループが 1,250ms で終了するように使用できる設定はありますか?

編集:詳細

各実行クエリは、インデックスのみのスキャンを実行しています。これが計画です。

EDIT2:

plperl で関数を書き直しました。100x 実行クエリで「spi_exec_query()」を使用すると、4,250ms で実行されました。100x 実行クエリで「spi_query()」を使用すると、1,250 ミリ秒で実行され、指数関数的な増加がなくなりました。