Postgres může používat nezaváděcí sloupce v indexu b-stromu, ale v mnohem méně efektivním režimu.
Pokud je první sloupec velmi selektivní (pouze několik řádků na A
), pak stěží zaznamenáte rozdíl ve výkonu, protože obě přístupové metody (dokonce i sekvenční skenování přes omezenou sadu) jsou levné. Požadavek na výkon roste s počtem řádků na A
.
Pro případ, který popisujete, doporučuji vytvořit index na (A, C, B)
nebo (C, A, B)
(jen se ujistěte, že B
je poslední) pro optimalizaci výkonu. Tímto způsobem získáte nejlepší výkon pro dotazy na (A, B, C)
a na (A, C)
podobně.
Na rozdíl od pořadí sloupců v indexu nezáleží na pořadí predikátů v dotazu.
Velmi podrobně jsme to probrali na dba.SE:
Všimněte si, že není nezáleží na tom, zda vedete s A, C
nebo C, A
pro daný případ:
Existují také některé další úvahy, ale vaše otázka neobsahuje všechny relevantní podrobnosti.