Sobes.tech
Middle

Ποιοι τύποι ευρετηρίων υπάρχουν στο PostgreSQL;

sobes.tech AI

Απάντηση από AI

Υπάρχουν οι ακόλουθοι βασικοί τύποι ευρετηρίων:

  1. B-tree (Δέντρο B) - ο πιο διαδεδομένος τύπος, κατάλληλος για τις περισσότερες τυπικές ερωτήσεις (ίσον, σύγκριση, εύρος). Βασίζεται σε ένα ισορροπημένο δέντρο.

  2. Hash (Κατακερματισμός) - χρησιμοποιείται για έλεγχο ισότητας (=). Ταχύτερο από το B-tree για τέτοιες ερωτήσεις, αλλά δεν υποστηρίζει συγκρίσεις και εύρη. Αποθηκεύει την τιμή κατακερματισμού του κλειδιού και έναν δείκτη στη γραμμή.

  3. GiST (Γενικευμένο Δέντρο Αναζήτησης) - δομή γενικευμένου δέντρου αναζήτησης που επιτρέπει την κατασκευή διαφορετικών ευρετηρίων για πολύπλοκους τύπους δεδομένων (γεωμετρικούς, κειμενικούς με αναζήτηση πλήρους κειμένου). Βασίζεται σε ένα ισορροπημένο δέντρο.

  4. SP-GiST (Χωρικά-Τμηματοποιημένο Γενικευμένο Δέντρο Αναζήτησης) - εξειδικευμένη έκδοση του GiST για δεδομένα που μπορούν να διαχωριστούν κατά χώρο (π.χ., σημεία, ορθογώνια). Παραδείγματα: δέντρα k-d, quadtrees.

  5. GIN (Γενικευμένο Αντίστροφο Ευρετήριο) - γενικευμένο αντίστροφο ευρετήριο, κυρίως για την αναζήτηση στοιχείων μέσα σε σύνθετες τιμές (π.χ., πίνακες, JSONB). Συχνά χρησιμοποιείται για αναζήτηση πλήρους κειμένου.

  6. BRIN (Δείκτης Περιοχής Μπλοκ) - δείκτης εύρους μπλοκ. Κατάλληλος για πολύ μεγάλους πίνακες με φυσικά ταξινομημένα δεδομένα (π.χ., κατά χρόνο). Ευρετηριάζει το εύρος τιμών σε φυσικά μπλοκ δίσκου.

  7. Bloom (Φίλτρο Bloom) - δεν είναι παραδοσιακό ευρετήριο, αλλά μια πιθανοκρατική δομή δεδομένων για γρήγορο έλεγχο απουσίας ενός στοιχείου. Χρησιμοποιείται για την επιτάχυνση επιλογής από πολύ μεγάλους πίνακες, όταν δεν απαιτείται ακριβής ταύτιση ή ως πρόσθετο φίλτρο πριν από την σάρωση του κύριου ευρετηρίου.

Παραδείγματα χρήσης:

  • B-tree: ευρετήριο σε αριθμητικά πεδία, ημερομηνίες, συμβολοσειρές για αναζήτηση εύρους (WHERE amount > 100).
  • Hash: σπάνια χρησιμοποιείται άμεσα, καθώς το B-tree είναι γενικά ταχύτερο για τις περισσότερες εργασίες.
  • GiST: γεωχωρικά ευρετήρια (gist(location)), ευρετήρια για αναζήτηση πλήρους κειμένου (to_tsvector).
  • SP-GiST: ευρετήρια για δισδιάστατα δεδομένα (spgist(point)).
  • GIN: ευρετήρια για πίνακες (gin(tags)), JSONB (gin(data)), αναζήτηση πλήρους κειμένου.
  • BRIN: ευρετήριο στη στήλη timestamp σε πίνακες καταγραφών, όπου τα δεδομένα είναι ταξινομημένα κατά χρόνο.
  • Bloom: ευρετήριο σε σύνολο στηλών (bloom(col1, col2, col3)) για γρήγορη απόρριψη γραμμών όπου η συνδυασμένη τιμή δεν υπάρχει.

Η επιλογή του τύπου ευρετηρίου εξαρτάται από τον τύπο δεδομένων της στήλης και τον τύπο ερωτημάτων που θέλετε να βελτιστοποιήσετε.