Sobes.tech
Junior — Middle

Čo môže spôsobiť, že PostgreSQL nebude používať index pri vykonávaní vyhľadávania podľa určitého poľa?

sobes.tech AI

Odpoveď od AI

PostgreSQL môže z rôznych dôvodov nepoužívať index pri vyhľadávaní podľa určitého poľa:

  • Nízka selektivita dotazu: ak podmienka vyhľadávania vracia veľký percento riadkov, plánovač môže zvoliť sekvenčné skenovanie, pretože je efektívnejšie.
  • Typy údajov alebo operácie, ktoré nie sú kompatibilné s indexom: napríklad použitie funkcií alebo operácií, ktoré nepodporujú index (napríklad LIKE '%pattern') alebo nesúlad typov údajov.
  • Chýbajúce alebo zastarané štatistiky: ak štatistiky tabuľky nie sú aktuálne (ANALYZE), plánovač môže urobiť nesprávne rozhodnutie.
  • Použitie výrazov, ktoré nie sú pokryté indexom: napríklad vyhľadávanie podľa vypočítaného poľa bez zodpovedajúceho funkčného indexu.
  • Konfiguračné parametre: napríklad príliš vysoká hodnota random_page_cost môže ovplyvniť výber plánu.

Príklad: ak máte index na poli name, ale dotaz používa WHERE LOWER(name) = 'abc', a index nie je funkčný na LOWER(name), index nebude použitý.