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_costmôž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ý.