Sobes.tech
Junior — Middle

Co může způsobit, že PostgreSQL nebude používat index při hledání podle určitého pole?

sobes.tech AI

Odpověď od AI

PostgreSQL může z různých důvodů nepoužívat index při hledání podle určitého pole:

  • Nízká selektivita dotazu: pokud podmínka hledání vrací velké procento řádků, plánovač může zvolit sekvenční skenování, protože je efektivnější.
  • Datové typy nebo operace, které nejsou kompatibilní s indexem: například použití funkcí nebo operací, které index nepodporují (například LIKE '%pattern') nebo nesoulad typů dat.
  • Chybějící nebo zastaralé statistiky: pokud statistiky tabulky nejsou aktuální (ANALYZE), může plánovač učinit nesprávné rozhodnutí.
  • Použití výrazů, které nejsou pokryty indexem: například hledání podle vypočítaného pole bez odpovídajícího funkčního indexu.
  • Konfigurační parametry: například příliš vysoká hodnota random_page_cost může ovlivnit volbu plánu.

Příklad: pokud máte index na poli name, ale dotaz používá WHERE LOWER(name) = 'abc', a index není funkční na LOWER(name), index nebude použit.