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

複数列の比較のためのインデックススキャン-不均一なインデックス列の順序

    PostgreSQLはタプルを非常に徹底的に実装します(Oracle、DB2、SQL Serverなどに見られる半分の実装とは異なります)。次のように、「タプルの不等式」を使用して条件を記述できます。

    select * 
    from table1
    where (a, -b, c) >= (10, -20, 30)
    order by a, -b, c
    limit 10
    

    2番目の列は降順であるため、比較中にその値を「反転」する必要があることに注意してください。そのため、-bとして表されます。 また、-20 。これは、日付、varchar、LOBなどの数値以外の列では扱いにくい場合があります。

    最後に、インデックスの使用は-bでも可能です。 次のようなアドホックインデックスを作成する場合の列値:

    create index ix1 on table1 (a, (-b), c);
    

    ただし、PostgreSQLにインデックスの使用を強制することはできません。 SQLは宣言型言語であり、命令型言語ではありません。 誘惑できます これを行うには、テーブルの統計を最新の状態に保ち、少数の行を選択します。 LIMITの場合 が大きすぎると、PostgreSQLは代わりに全表スキャンを使用する傾向がある可能性があります。



    1. あいまい検索をサポートする、実装が最も簡単なサイト検索アプリケーションは何ですか?

    2. データベース設計に関する質問 - カテゴリ/サブカテゴリ

    3. ChamiloLMSMySQLデータベースをバックアップする方法

    4. Oracle SQL-各列の個別のカウントを動的に取得するにはどうすればよいですか?