Έχω περιορισμένη έκθεση στη ΒΔ και έχω χρησιμοποιήσει τη ΒΔ μόνο ως προγραμματιστής εφαρμογών. Θέλω να μάθω για τα Clustered
και Non clustered indexes
.
Έψαξα στο google και αυτό που βρήκα ήταν :
Ένα συγκεντρωτικό ευρετήριο είναι ένας ειδικός τύπος ευρετηρίου που αναδιατάσσει τον τρόπο με τον οποίο Οι εγγραφές στον πίνακα είναι φυσικά... αποθηκεύονται. Ως εκ τούτου, ο πίνακας μπορεί να έχει μόνο ένα συγκεντρωτικό ευρετήριο. Οι κόμβοι φύλλων ενός ομαδοποιημένου ευρετηρίου περιέχουν τα δεδομένα σελίδες. Ένα μη συγκεντρωτικό ευρετήριο είναι ένα ειδικός τύπος ευρετηρίου στον οποίο οι λογική σειρά του ευρετηρίου δεν δεν ταιριάζει με τη φυσική αποθηκευμένη σειρά των των γραμμών στο δίσκο. Ο κόμβος φύλλου ενός μη ομαδοποιημένου ευρετηρίου δεν αποτελείται από τις σελίδες δεδομένων. Αντ' αυτού, το φύλλο κόμβοι περιέχουν γραμμές ευρετηρίου.
Αυτό που βρήκα στο SO ήταν https://stackoverflow.com/questions/91688/what-are-the-differencespros-cons-between-clustered-and-non-clustered-indexes.
Μπορεί κάποιος να το εξηγήσει αυτό σε απλά αγγλικά;
Με ένα ομαδοποιημένο ευρετήριο οι γραμμές αποθηκεύονται φυσικά στο δίσκο με την ίδια σειρά όπως το ευρετήριο. Επομένως, μπορεί να υπάρχει μόνο ένα συγκεντρωτικό ευρετήριο.
Με ένα μη συγκεντρωτικό ευρετήριο υπάρχει μια δεύτερη λίστα που έχει δείκτες στις φυσικές γραμμές. Μπορείτε να έχετε πολλούς μη συστεγαζόμενους δείκτες, αν και κάθε νέος δείκτης θα αυξάνει το χρόνο που απαιτείται για την εγγραφή νέων εγγραφών.
Είναι γενικά ταχύτερο να διαβάζετε από ένα συστεγαζόμενο ευρετήριο αν θέλετε να πάρετε πίσω όλες τις στήλες. Δεν χρειάζεται να πηγαίνετε πρώτα στο ευρετήριο και μετά στον πίνακα.
Η εγγραφή σε έναν πίνακα με συστάδα ευρετηρίων μπορεί να είναι πιο αργή, αν υπάρχει ανάγκη αναδιάταξης των δεδομένων.
Ένα ομαδοποιημένο ευρετήριο σημαίνει ότι λέτε στη βάση δεδομένων να αποθηκεύει κοντινές τιμές πραγματικά κοντά η μία στην άλλη στο δίσκο. Αυτό έχει το πλεονέκτημα της ταχείας σάρωσης/ανάκτησης εγγραφών που εμπίπτουν σε κάποιο εύρος τιμών συστεγαζόμενου ευρετηρίου.
Για παράδειγμα, έχετε δύο πίνακες, τον Πελάτη και την Παραγγελία:
Customer
----------
ID
Name
Address
Order
----------
ID
CustomerID
Price
Αν θέλετε να ανακτήσετε γρήγορα όλες τις παραγγελίες ενός συγκεκριμένου πελάτη, ίσως θελήσετε να δημιουργήσετε ένα συγκεντρωτικό ευρετήριο στη στήλη "CustomerID" του πίνακα Order. Με αυτόν τον τρόπο οι εγγραφές με το ίδιο CustomerID θα αποθηκεύονται φυσικά κοντά η μία στην άλλη στο δίσκο (clustered), γεγονός που επιταχύνει την ανάκτησή τους.
Υ.Γ. Το ευρετήριο στο CustomerID προφανώς δεν θα είναι μοναδικό, οπότε θα πρέπει είτε να προσθέσετε ένα δεύτερο πεδίο για να "μοναδικοποιήσετε" το ευρετήριο είτε να αφήσετε τη βάση δεδομένων να το χειριστεί αυτό για εσάς, αλλά αυτό είναι μια άλλη ιστορία.
Όσον αφορά τα πολλαπλά ευρετήρια. Μπορείτε να έχετε μόνο ένα συγκεντρωτικό ευρετήριο ανά πίνακα, επειδή αυτό καθορίζει τον τρόπο με τον οποίο τα δεδομένα είναι φυσικά διατεταγμένα. Αν θέλετε μια αναλογία, φανταστείτε ένα μεγάλο δωμάτιο με πολλούς πίνακες σε αυτό. Μπορείτε είτε να τοποθετήσετε αυτά τα τραπέζια για να σχηματίσουν διάφορες σειρές είτε να τα τραβήξετε όλα μαζί για να σχηματίσουν ένα μεγάλο τραπέζι συσκέψεων, αλλά όχι και με τους δύο τρόπους ταυτόχρονα. Ένας πίνακας μπορεί να έχει και άλλα ευρετήρια, αυτά θα δείχνουν τότε στις καταχωρήσεις του ομαδοποιημένου ευρετηρίου, το οποίο με τη σειρά του θα λέει τελικά πού να βρείτε τα πραγματικά δεδομένα.
Ένας πολύ απλός, μη τεχνικός κανόνας θα ήταν ότι τα ομαδοποιημένα ευρετήρια χρησιμοποιούνται συνήθως για το πρωτεύον κλειδί σας (ή, τουλάχιστον, για μια μοναδική στήλη) και ότι τα μη ομαδοποιημένα ευρετήρια χρησιμοποιούνται για άλλες περιπτώσεις (ίσως για ένα ξένο κλειδί). Πράγματι, ο SQL Server θα δημιουργήσει από προεπιλογή ένα συγκεντρωτικό ευρετήριο στη στήλη ή στις στήλες του πρωτεύοντος κλειδιού σας. Όπως θα έχετε μάθει, το συστεγαζόμενο ευρετήριο σχετίζεται με τον τρόπο με τον οποίο τα δεδομένα ταξινομούνται φυσικά στο δίσκο, πράγμα που σημαίνει ότι είναι μια καλή επιλογή για όλες τις περιπτώσεις.