PostgreSQL mengimplementasikan tupel dengan sangat teliti, (tidak seperti setengah implementasi yang ditemukan di Oracle, DB2, SQL Server, dll.). Anda dapat menulis kondisi Anda menggunakan "ketidaksamaan tupel", seperti pada:
select *
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10
Harap dicatat bahwa karena kolom kedua dalam urutan menurun, Anda harus "membalikkan" nilainya selama perbandingan. Itu sebabnya dinyatakan sebagai -b
dan juga, -20
. Ini bisa menjadi rumit untuk kolom non-numerik seperti tanggal, varchars, LOB, dll.
Akhirnya, penggunaan indeks masih dimungkinkan dengan -b
nilai kolom jika Anda membuat indeks ad-hoc, seperti:
create index ix1 on table1 (a, (-b), c);
Namun, Anda tidak akan pernah bisa memaksa PostgreSQL untuk menggunakan file index. SQL adalah bahasa deklaratif, bukan bahasa imperatif. Anda dapat memikat itu untuk melakukannya dengan menjaga statistik tabel tetap up to date, dan juga dengan memilih sejumlah kecil baris. Jika LIMIT
. Anda terlalu besar, PostgreSQL mungkin cenderung menggunakan pemindaian tabel penuh.