PostgreSQL implementerer tuples meget grundigt (i modsætning til halve implementeringer fundet i Oracle, DB2, SQL Server osv.). Du kan skrive din tilstand ved at bruge "tuples ulighed", som i:
select *
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10
Bemærk venligst, at da den anden kolonne er i faldende rækkefølge, skal du "invertere" dens værdi under sammenligningen. Det er derfor, det er udtrykt som -b
og også -20
. Dette kan være vanskeligt for ikke-numeriske kolonner såsom datoer, varchars, LOB'er osv.
Endelig er brugen af et indeks stadig muligt med -b
kolonneværdi, hvis du opretter et ad-hoc-indeks, såsom:
create index ix1 on table1 (a, (-b), c);
Du kan dog aldrig tvinge PostgreSQL til at bruge et indeks. SQL er et deklarativt sprog, ikke et imperativt sprog. Du kan lokke det at gøre det ved at holde tabelstatistik opdateret, og også ved at vælge et lille antal rækker. Hvis din LIMIT
er for stor, kan PostgreSQL være tilbøjelig til at bruge en fuld tabelscanning i stedet.