問題タブ [gist-index]

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 投票する
1 に答える
18075 参照

postgresql - PostgreSQL:GINまたはGiSTインデックス?

私が見つけた情報から、どちらも同じ問題を解決します。配列の包含や共通部分(&&、@>、<@など)などのより難解な操作です。ただし、どちらを使用するか(またはどちらも使用しないか)についてのアドバイスに興味があります。PostgreSQL
のドキュメントには、これに関するいくつかの情報があります。

  • GINインデックスルックアップはGiSTの約3倍高速です
  • GINインデックスの構築にはGiSTの約3倍の時間がかかります
  • GINインデックスの更新はGiSTの約10倍遅い
  • GINインデックスはGiSTの2〜3倍です

ただし、メモリとインデックスのサイズの比率が小さくなり始めたとき(つまり、インデックスのサイズが使用可能なメモリよりもはるかに大きくなったとき)にパフォーマンスに影響があるかどうかを知りたいと思いますか?#postgresql IRCチャネルで、GINはすべてのインデックスをメモリに保持する必要があると言われました。そうしないと、Bツリーとは異なり、ディスクから読み込む部分がわからないため、効果的ではありません。特定のクエリ?質問は次のようになります:これは本当ですか(私もこれの反対を言われたので)?GiSTにも同じ制限がありますか?これらのインデックス付けアルゴリズムの1つを使用する際に注意する必要がある他の制限はありますか?

0 投票する
4 に答える
12314 参照

postgresql - B-Tree と GiST インデックス メソッド (PostgreSQL) の違いは何ですか?

私は最近、Postgres データベースの最適化に取り組んでおり、伝統的に B-Tree インデックスしか使用していません。ただし、Postgres 8.3 のドキュメントで、GiST インデックスが一意でない複数列のインデックスをサポートしていることを確認しました。

しかし、それらの実際の違いが何であるかはわかりませんでした。私の仲間のコーダーが、それらの間の長所と短所は何か、そしてさらに重要なことに、私が一方を他方よりも使用する理由を説明できることを望んでいましたか?

0 投票する
4 に答える
13432 参照

postgresql - PostgreSQL インデックスが IP 範囲のクエリに使用されない

私は PostgreSQL 9.2 を使用しており、IP 範囲の表があります。SQLは次のとおりです。

begin_ip_numと の両方に単純な B ツリー インデックスを追加しましたend_ip_num

使用されているクエリは次のとおりです。

問題は、BETWEENクエリが のインデックスのみを使用していることbegin_ip_numです。インデックスを使用した後、 を使用して結果をフィルタリングしend_ip_numます。EXPLAIN ANALYZE結果は次のとおりです。

begin_ip_numと の両方に複合インデックスを追加するなど、インデックスのさまざまな組み合わせを既に試しましたend_ip_num

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

postgresql - ジンと要点を検出するにはどうすればよいですか

postgresql で GIN および GiST インデックスを検出するにはどうすればよいですか? postgres のデータベースがフルテキストを使用しているかどうかを探しています。テーブルは GIN o GiST を使用し、フルテキストを使用していると思います。

GIN または GiST インデックスが必ずしも全文検索に使用されるとは限らないことは承知していますが、それらを他のインデックス タイプと区別するにはどうすればよいですか? Gin an Gist インデックスを一覧表示したい

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

postgresql - Postgres hstore: GIN 対 GiST インデックスのパフォーマンス

hstore 列に GIN または GiST インデックスを使用するかどうかを決定する必要があります。

Postgresのドキュメントには次のように記載されています。

  • GIN インデックスのルックアップは、GiST よりも約 3 倍高速です
  • GIN インデックスの構築には、GiST よりも約 3 倍の時間がかかります
  • GIN インデックスは、更新が GiST よりも約 10 倍遅い
  • GIN インデックスは GiST の 2 倍から 3 倍大きい

私の解釈では、大量のクエリが必要な場合は GIN を使用し、大量の更新が必要な場合は GiST を使用します。

このテストでは、前述の GiST に対する GIN の 3 つの欠点がすべて確認されています。ただし、Postgres のドキュメントで提案されている以外に、GIN の GiST に対する利点 (ルックアップの高速化) は非常に小さいです。スライド 53 は、Postgres のドキュメントで提案されている 200% から 300% とは対照的に、テストでは GIN が 2% から 3% しか速かったことを示しています。

どちらの情報源がより信頼性が高く、その理由は?

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

postgresql - PostgreSQL の日付範囲がインデックスを正しく使用していない

日付のタイプの user_birthday フィールドを持つ単純なテーブルがあります (NULL 値にすることができます)

そのフィールドには、NOT user_birthday IS NULL のルールで定義されたインデックス (btree) があります。

別のアイデアをフォローアップしようとして、拡張機能を追加しbtree_gist、次のインデックスを作成しました。

しかし、範囲チェックには使用されていないため、影響はありませんでした。

PostgreSQL のバージョンは 9.3.4.0 (22) Postgres.appで、問題は 9.3.3.0 (21) Postgres.app にも存在します。

次のクエリに興味をそそられました。

クエリ #1:

クエリ #2:

一見すると、どちらも同じ実行計画を持つはずですが、何らかの理由で結果は次のようになります。

クエリ #1:

クエリ #2:

ご覧のとおり、<@ daterangeは既存のインデックスを利用していませんが、利用して BETWEENいます。

このルールの実際の使用例は、より複雑なクエリであり、Recheck Cond および Bitmap Heap スキャンにはならないことに注意してください。アプリケーションの複雑なクエリでは、2 つの方法 (120 万レコード) の違いは非常に大きく、クエリ #1 は 415 ミリ秒、クエリ #2 は 84 ミリ秒です。

これは日付範囲のバグですか? 私は何か間違ったことをしていますか?またはdatarange <@設計どおりに実行されていますか?

pgsql-bugs メーリング リストにも議論があります。

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

arrays - 大規模なデータセットの要素ごとの Postgre 順序付けテーブル

大量 (~500 万) のインデックス付きデータ ポイントを含む一連のオブジェクト (~1000 行) を効率的に順序付けする方法を見つけようとすると、難しい問題があります。私の場合、特定のデータポイントでテーブルを並べ替えることができるクエリが必要です。各データポイントは 16 ビットの符号なし整数です。

私は現在、大きな配列を使用してこの問題を解決しています:

オブジェクト テーブル:

GIST インデックス:

このインデックスは現在、選択クエリを実行するときに使用されていませんが、とにかく役立つかどうかはわかりません。

配列フィールドは毎日、約 500 万個の値の新しいセットで更新されます

特定のデータ ポイントの値で並べ替えられたすべてのオブジェクトを一覧表示する必要がある Web サーバーがあります。

クエリの例:

現在、このクエリの実行には約 2.5 秒かかります。

質問: より良いアプローチはありますか? 挿入側がバックグラウンドで発生するので遅くなるのはうれしいですが、選択クエリはできるだけ速くする必要があります。とは言っても挿入にかかる時間には限界があります。

すべての値に独自の行があるルックアップ テーブルを作成することを検討しましたが、挿入/ルックアップ時間がこのアプローチによってどのように影響を受けるかはわかりません。個々の行として最大 500 万のデータ ポイントを持つ 1000 以上のレコードを入力すると思われます。遅すぎる。

現在、行の挿入には約 30 秒かかりますが、現時点では許容範囲です。

最終的には、基本的な問題に対するスケーラブルなソリューションを探していますが、今のところ、このソリューションが機能する必要があるため、このソリューションをさらにスケールアップする必要はありません。

更新: 配列の代わりに巨大なテーブルを使用することを却下したのは間違いでした。挿入時間は大幅に増加しましたが、クエリ時間はわずか数ミリ秒に短縮されました。

データムがゼロ以外で前回の更新から変更された場合にのみデータムを保存するように生成アルゴリズムを変更しています。これにより、数秒しかかからない数十万の値に挿入が削減されました。

新しいテーブル:

新しいクエリ:

挿入時間: 15,000 レコード/秒

クエリ時間: 17ms