Sobes.tech
Middle+

Πότε είναι πιο αποδοτικό ένας πλήρης έλεγχος του συνόλου δεδομένων από την πρόσβαση μέσω δείκτη;

sobes.tech AI

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

Όταν το ποσοστό των εγγραφών που πρέπει να επεξεργαστούν είναι αρκετά υψηλό (π.χ., περισσότερο από 10-20%), ώστε το κόστος αναζήτησης στον δείκτη και ανάγνωσης μεμονωμένων μπλοκ δεδομένων να υπερβαίνει τα πλεονεκτήματα.

Άλλες περιπτώσεις:

  • Έλλειψη κατάλληλου δείκτη: Αν δεν υπάρχει δείκτης που καλύπτει τα πεδία φίλτρου ή παρέχει πρόσβαση στα δεδομένα ταχύτερα από μια πλήρη σάρωση.
  • Ανισοκατανομή δεδομένων (skew): Αν το δείκτη πεδίο έχει χαμηλή καρδινάλια και το μεγαλύτερο μέρος των δεδομένων συγκεντρώνεται σε λίγες τιμές, η σάρωση μπορεί να είναι ταχύτερη από το να διασχίζεις πολλά φύλλα δείκτη με ίδιες τιμές.
  • Μικρός σύνολο δεδομένων: Για μικρούς πίνακες, το κόστος διατήρησης και χρήσης δείκτη μπορεί να είναι μεγαλύτερο από το όφελος.
  • Σειριακή ανάγνωση: Μια πλήρης σάρωση συνήθως απαιτεί σειριακή ανάγνωση από το δίσκο, η οποία μπορεί να είναι ταχύτερη από τυχαία ανάγνωση κατά την πρόσβαση μέσω δείκτη, ειδικά σε HDD.
  • Μεγάλο όγκο δεδομένων σε μια γραμμή: Αν κάθε γραμμή περιέχει μεγάλο όγκο δεδομένων, η ανάγνωση ολόκληρου του συνόλου δεδομένων σε μία φορά μπορεί να είναι πιο αποδοτική από πολλαπλές προσβάσεις στον δίσκο για την απόκτηση μεμονωμένων γραμμών μέσω δείκτη.

Παράδειγμα όπου μια πλήρης σάρωση μπορεί να είναι πιο αποδοτική:

// Απλή επιλογή * σε έναν πίνακα με λίγες γραμμές.
SELECT *
FROM small_table;

// Ερώτημα με φίλτρο που επηρεάζει τις περισσότερες γραμμές
SELECT *
FROM large_table
WHERE status = 'processed'; // Αν οι περισσότερες γραμμές έχουν κατάσταση 'processed'