問題タブ [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 - PostgreSQLが小さなテーブルでインデックスを使用しないのはなぜですか?
PostgreSQLには次のテーブルがあります。
私は次の選択を行います:
実行計画の説明は次のようになります。
私が理解している限り、これは全表スキャンです。問題は、なぜ私のインデックスが使用されないのかということです。
おそらく、その理由は、テーブルの行が少なすぎるためですか?私はそれらを20個しか持っていません。インデックスの問題を確認するためにテーブルにランダムデータを簡単に入力するためのSQLステートメントを提供していただけますか?
私はこの記事を見つけました:http://it.toolbox.com/blogs/db2luw/how-to-easily-populate-a-table-with-random-data-7888、しかしそれは私にとってはうまくいきません。ステートメントの効率は重要ではなく、単純さだけが重要です。
postgresql - PostgreSQL がインデックスを使用して、特定の照合順序でテキスト プレフィックス検索を実行しないのはなぜですか?
検討:
Postgres はその検索を行うためにインデックスを使用しません。collation を使用する場合"POSIX"
、Postgres はインデックスを使用します: http://sqlfiddle.com/#!12/ed1cc/1
collation を使用する場合"en_US"
、Postgres は順次スキャンを使用します: http://sqlfiddle.com/#!12/efb18/1
違いはなぜですか?
sql - 乗算結合クエリを最適化するには?
そんな問い合わせが来ました
そして、共通して、このような 9 ~ 10 の結合があります。そして、それは非常に遅く実行されます。person_func(person_id)、person_location(person_id) にインデックスを追加しましたが、役に立ちませんでした。最適化するにはどうすればよいですか?
例 - SQLFiddle の例
postgresql - 過去Xか月以内のPostgreSQL累積カウント
次の表があるとします。
各(user_id、month_d)ペアの過去6か月の累積カウントを照会したいと思います。私は次のJOINでそれを行うことができます:
しかし、これはウィンドウ関数で解決できるのだろうか?
サンプルデータ:
期待される結果(上記の結合から):
postgresql - ST_Contains() による遅い更新
上記のコードを使用すると、正確な都市を GPS ポイントに追加できます。5,000 万行で約 45 ~ 50 分実行されます。"city" テーブルには、チェックする必要がある約 4000 の都市があります。
特定の国 (1 つの国のみ) に 19 の郡を含む別のシェイプ ファイルがあります。郡をポイントに追加するには、約 1.5 時間かかります。
52 の EU 諸国を含む 3 番目のシェイプ ファイルがあります。同じ SQL クエリでほぼ 25 時間実行されます。
すべてのテーブルには、geom ごとに次のようなインデックスがあります。
Q : チェックするポリゴン数が少ないのになぜこんなに遅いのですか?
説明する 分析する:
sql - BETWEEN 日付ステートメントの最適化
フィールドでBETWEEN
句を使用する PostgreSQL クエリを最適化するのに助けが必要です。timestamp
私は2つのテーブルを持っています:
約 3394 行を含む
約4000000行を含む
id_one
PKとid_two
の両方、FKid_one
とに btree インデックスがありますcut_time
。
次のようなクエリを実行したい:
このクエリは、約 7 秒で約 1.700.000 行を取得します。
Explain Analyse レポートの下に、次のレポートが表示されます。
タイムスタンプ列のインデックスは使用されません。このクエリを最適化する方法は?
sql - SQL ウィンドウ関数 - SELECT DISTINCT ORDER BY LIMIT
PostgreSQL データベースに次の 3 つのテーブルがあります。
- アーティスト: ID、名前
- アルバム: id、タイトル、年、artist_id
- 曲: id、タイトル、album_id
基本的に各アーティストには複数のアルバムがあり、各アルバムには複数の曲があります。
私のクエリは、タイトルが「The」で始まる曲を持つ 25 個の異なる artist.id を、アルバムの年順に正しく返します。
ただし、最も内側のクエリには LIMIT がないため、テーブル全体で可能なすべての一致を検索するため、遅くて非効率的です。理想的には、25 個の異なる artist.id が見つかったときに検索を停止します。
このクエリを書き直すか最適化して、より高速に実行できますか?
ここでウィンドウ関数を使用すると速度が向上すると思いますが、機能するものを見つけることができませんでした。
ありがとう!
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 に関連していると思われますが、突き止めることはできませんでした。
助言がありますか?
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 ミリ秒で実行され、指数関数的な増加がなくなりました。