Junior — Middle
რა შეიძლება გამოიწვიოს PostgreSQL-ის მიერ კონკრეტული ველის ძიებისას ინდექსის გამოყენებისგან თავის შეკავება?
sobes.tech AI
პასუხი AI-სგან
PostgreSQL შეიძლება არ გამოიყენოს ინდექსი გარკვეული ველის ძიებისას რამდენიმე მიზეზის გამო:
- დაბალი სელექციურობა: თუ ძიების პირობა აბრუნებს დიდ პროცენტს სვეტებისგან, გეგმარებელს შეუძლია აირჩიოს სერიული სკანირება, რადგან ის უფრო ეფექტურია.
- მონაცემთა ტიპები ან ოპერაციები, რომლებიც არ არის თავსებადი ინდექსთან: მაგალითად, ფუნქციების ან ოპერაციების გამოყენება, რომლებიც არ მხარს უჭერენ ინდექსს (მაგალითად,
LIKE '%pattern') ან მონაცემთა ტიპების შეუთავსებლობა. - სტატისტიკების ნაკლებობა ან მოძველებული სტატისტიკები: თუ ცხრილის სტატისტიკა განახლებული არ არის (
ANALYZE), გეგმარებელი შეიძლება მიიღოს მცდარი გადაწყვეტილება. - გამოხატვათა გამოყენება, რომლებიც არ არის დაფარული ინდექსით: მაგალითად, გამოთვლილი ველის ძიება შესაბამისი ფუნქციური ინდექსის გარეშე.
- კონფიგურაციის პარამეტრები: მაგალითად, ძალიან მაღალი
random_page_costმნიშვნელობა შეიძლება გავლენა იქონიოს გეგმის არჩევაზე.
მაგალითი: თუ თქვენს აქვს ინდექსი name ველზე, მაგრამ შეკითხვა იყენებს WHERE LOWER(name) = 'abc', და ინდექსი არ არის ფუნქციონალური LOWER(name)-ზე, ინდექსი არ გამოიყენება.