Sobes.tech
Junior — Middle

Ինչ կարող է հանգեցնել այն բանին, որ PostgreSQL-ը չօգտագործի ինդեքսը որոշ դաշտի որոնման ժամանակ?

sobes.tech AI

Պատասխան AI-ից

PostgreSQL-ը կարող է մի քանի պատճառներով չօգտագործել ինդեքսը որոշակի դաշտով որոնելիս:

  • Նվազ ընտրողականություն: եթե որոնման պայմանը վերադարձնում է մեծ տոկոս տողերից, պլանավորողը կարող է ընտրել սերիական սկան, քանի որ դա ավելի արդյունավետ է:
  • Տվյալների տիպեր կամ գործողություններ, որոնք չեն համատեղելի ինդեքսի հետ: օրինակ, ֆունկցիաներ կամ գործողություններ, որոնք չեն աջակցում ինդեքսին (օրինակ, LIKE '%pattern') կամ տվյալների տիպերի անհամապատասխանություն:
  • Ստատիստիկայի բացակայություն կամ հնացած ստատիստիկա: եթե աղյուսակի ստատիստիկան թարմացված չէ (ANALYZE), պլանավորողը կարող է սխալ որոշում ընդունել:
  • Ելք արտահայտությունների օգտագործում, որոնք չեն ընդգրկված ինդեքսում: օրինակ, հաշվարկված դաշտի որոնում առանց համապատասխան ֆունկցիոնալ ինդեքսի:
  • Կոնֆիգուրացիոն պարամետրեր: օրինակ, շատ բարձր random_page_cost արժեքը կարող է ազդել պլանի ընտրության վրա:

Օրինակ՝ եթե ձեր name դաշտում կա ինդեքս, բայց հարցումը օգտագործում է WHERE LOWER(name) = 'abc', և ինդեքսը ֆունկցիոնալ չէ LOWER(name)-ի վրա, ինդեքսը չի օգտագործվի: