sql >> データベース >  >> RDS >> PostgreSQL

3つのキーを持つ複合インデックス、真ん中のキーをスキップしてクエリを実行するとどうなりますか?

    Postgresは、Bツリーインデックスで先頭以外の列を使用できますが、効率がはるかに低くなります。

    最初の列が非常に選択的である場合(Aごとに数行のみ) )どちらのアクセス方法(縮小されたセットでの順次スキャンでも)が安価であるため、パフォーマンスの違いにほとんど気付かないでしょう。パフォーマンスへの影響は、Aあたりの行数とともに増加します 。

    あなたが説明するケースでは、 (A, C, B)にインデックスを作成することをお勧めします または(C, A, B)B 最後に来る)パフォーマンスを最適化する。このようにして、(A, B, C)でのクエリで最高のパフォーマンスを得ることができます。 および(A, C) 同様に。

    インデックス内の列のシーケンスとは異なり、クエリ内の述語のシーケンスは重要ではありません。

    これについては、dba.SEで詳細に説明しました:

    ではないことに注意してください A, Cでリードするかどうかは関係ありません またはC, A 手元のケースの場合:

    他にもいくつかの考慮事項がありますが、質問に関連するすべての詳細が含まれているわけではありません。



    1. 共有を排他ロックにアップグレードする際のMySQLデッドロックの回避

    2. 既存のPostgreSQLデータベースでTimescaleDBを有効にする方法

    3. 1つのクエリで要約結果を作成する

    4. カスタムビルド統計