PostgreSQL implementuje krotki bardzo dokładnie (w przeciwieństwie do połowicznych implementacji występujących w Oracle, DB2, SQL Server itp.). Możesz zapisać swój warunek za pomocą „nierówności krotek”, jak w:
select *
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10
Należy pamiętać, że ponieważ druga kolumna jest w porządku malejącym, podczas porównywania należy „odwrócić” jej wartość. Dlatego jest wyrażony jako -b
a także -20
. Może to być trudne w przypadku kolumn nienumerycznych, takich jak daty, varchary, LOB itp.
Wreszcie, użycie indeksu jest nadal możliwe z -b
wartość kolumny, jeśli tworzysz indeks ad hoc, na przykład:
create index ix1 on table1 (a, (-b), c);
Jednak nigdy nie można zmusić PostgreSQL do korzystania z indeksu. SQL jest językiem deklaratywnym, a nie imperatywnym. Możesz przyciągnąć aby to zrobić, aktualizując statystyki tabeli, a także wybierając niewielką liczbę wierszy. Jeśli Twój LIMIT
jest za duży, PostgreSQL może zamiast tego użyć pełnego skanowania tabeli.