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.