PostgreSQL implementuje n-tice velmi důkladně (na rozdíl od polovičních implementací nalezených v Oracle, DB2, SQL Server atd.). Svou podmínku můžete zapsat pomocí "n-ticové nerovnosti", jako v:
select *
from table1
where (a, -b, c) >= (10, -20, 30)
order by a, -b, c
limit 10
Upozorňujeme, že vzhledem k tomu, že druhý sloupec je v sestupném pořadí, musíte jeho hodnotu během porovnávání „převrátit“. Proto je vyjádřen jako -b
a také -20
. To může být složité u nečíselných sloupců, jako jsou data, varchars, LOB atd.
A konečně, použití indexu je stále možné s -b
hodnota sloupce, pokud vytvoříte index ad-hoc, například:
create index ix1 on table1 (a, (-b), c);
Nikdy však nemůžete přinutit PostgreSQL, aby používal index. SQL je deklarativní jazyk, nikoli imperativní. Můžete nalákat docílíte toho udržováním aktuálních statistik tabulky a také výběrem malého počtu řádků. Pokud váš LIMIT
je příliš velký, PostgreSQL se může přiklánět k použití úplného skenování tabulky.