Sobes.tech
Junior — Middle

რა შეიძლება გამოიწვიოს PostgreSQL-ის მიერ კონკრეტული ველის ძიებისას ინდექსის გამოყენებისგან თავის შეკავება?

sobes.tech AI

პასუხი AI-სგან

PostgreSQL შეიძლება არ გამოიყენოს ინდექსი გარკვეული ველის ძიებისას რამდენიმე მიზეზის გამო:

  • დაბალი სელექციურობა: თუ ძიების პირობა აბრუნებს დიდ პროცენტს სვეტებისგან, გეგმარებელს შეუძლია აირჩიოს სერიული სკანირება, რადგან ის უფრო ეფექტურია.
  • მონაცემთა ტიპები ან ოპერაციები, რომლებიც არ არის თავსებადი ინდექსთან: მაგალითად, ფუნქციების ან ოპერაციების გამოყენება, რომლებიც არ მხარს უჭერენ ინდექსს (მაგალითად, LIKE '%pattern') ან მონაცემთა ტიპების შეუთავსებლობა.
  • სტატისტიკების ნაკლებობა ან მოძველებული სტატისტიკები: თუ ცხრილის სტატისტიკა განახლებული არ არის (ANALYZE), გეგმარებელი შეიძლება მიიღოს მცდარი გადაწყვეტილება.
  • გამოხატვათა გამოყენება, რომლებიც არ არის დაფარული ინდექსით: მაგალითად, გამოთვლილი ველის ძიება შესაბამისი ფუნქციური ინდექსის გარეშე.
  • კონფიგურაციის პარამეტრები: მაგალითად, ძალიან მაღალი random_page_cost მნიშვნელობა შეიძლება გავლენა იქონიოს გეგმის არჩევაზე.

მაგალითი: თუ თქვენს აქვს ინდექსი name ველზე, მაგრამ შეკითხვა იყენებს WHERE LOWER(name) = 'abc', და ინდექსი არ არის ფუნქციონალური LOWER(name)-ზე, ინდექსი არ გამოიყენება.