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は代わりに全表スキャンを使用する傾向がある可能性があります。