sql >> Databáze >  >> RDS >> PostgreSQL

Indexové skenování pro vícesloupcové porovnání - nejednotné řazení indexových sloupců

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.



  1. Mám použít PDO PARAM_LOB nebo PARAM_STR pro typ MySQL TEXT?

  2. Jak implementovat nezávislost databáze pomocí Entity Framework

  3. Java Připravený příkaz se neprovádí

  4. vypočítat rozdíly mezi dvěma řádky v SQL