Junior — Middle
Τι μπορεί να οδηγήσει το PostgreSQL στο να μην χρησιμοποιεί δείκτη κατά την εκτέλεση αναζήτησης σε ένα συγκεκριμένο πεδίο;
sobes.tech AI
Απάντηση από AI
Το PostgreSQL ενδέχεται να μην χρησιμοποιεί δείκτη κατά την αναζήτηση σε ένα συγκεκριμένο πεδίο για διάφορους λόγους:
- Χαμηλή επιλεκτικότητα του ερωτήματος: εάν η συνθήκη αναζήτησης επιστρέφει μεγάλο ποσοστό γραμμών, ο σχεδιαστής μπορεί να επιλέξει μια σειριακή σάρωση, καθώς είναι πιο αποδοτική.
- Τύποι δεδομένων ή λειτουργίες που δεν είναι συμβατές με τον δείκτη: για παράδειγμα, η χρήση συναρτήσεων ή λειτουργιών που δεν υποστηρίζουν δείκτες (όπως το
LIKE '%pattern') ή ασυμβατότητα τύπων δεδομένων. - Έλλειψη στατιστικών ή παρωχημένα στατιστικά: εάν τα στατιστικά του πίνακα δεν είναι ενημερωμένα (
ANALYZE), ο σχεδιαστής μπορεί να πάρει λανθασμένη απόφαση. - Χρήση εκφράσεων που δεν καλύπτονται από τον δείκτη: για παράδειγμα, αναζήτηση σε υπολογιζόμενο πεδίο χωρίς κατάλληλο λειτουργικό δείκτη.
- Παραμέτρους διαμόρφωσης: για παράδειγμα, μια πολύ υψηλή τιμή του
random_page_costμπορεί να επηρεάσει την επιλογή του σχεδίου.
Παράδειγμα: αν έχετε δείκτη στο πεδίο name, αλλά το ερώτημα χρησιμοποιεί WHERE LOWER(name) = 'abc', και ο δείκτης δεν είναι λειτουργικός στο LOWER(name), ο δείκτης δεν θα χρησιμοποιηθεί.