Να προσθέσω κι εγώ με τη σειρά μου ότι η δημιουργία indexes στη βάση είναι μια «τέχνη» που απαιτεί αρκετή τεχνογνωσία για πετύχεις σωστό αποτέλεσμα.
Το πρώτο πράγμα που χρειάζεται να ξέρεις είναι το τι queries χρησιμοποιείς. Τι είναι το SARGable και τι το non-SARGable WHERE clause. Τα indexes έχουν άμεση σχέση με τα queries και γι αυτόν το λόγο δεν είναι μια διαδικασία οne-off αλλά κάτι που ελέγχεται και διορθώνεται συχνά. Υπάρχουν περιπτώσεις όπου μπορεί indexes που ευεργετούν ένα SELECT να επιδρούν αρνητικά σε κάποιο άλλο ή πιο πιθανά σε κάποιo INSERT/UPDATE/DELETE.
Το δεύτερο πράγμα που χρειάζεται να ξέρεις είναι τα inner workings του storage engine, του query-engine και του indexing. Τι είναι το heap, τι είναι το clustered index και τι το non-clustered index. Τι διαφορά έχει ένα INSERT/UPDATE/DELETE όταν γίνεται σε πίνακα χωρίς index, με clustered index και με clustered + non-clustered indexes. Επίσης, θα πρέπει να μπορείς να διαβάζεις και να καταλαβαίνεις ένα execution plan προκειμένου να μπορείς να αποφασίζεις αν ένα index κάνει καλό ή καλό. Το execution time δεν είναι το μοναδικό κριτήριο που παίζει ρόλο σε αυτήν την απόφαση καθώς μιλάμε για μηχανές που προσπαθούν να εξυπηρετίσουν ταυτόχρονα πολλαπλούς χρήστες. Επιπρόσθετα, θα πρέπει να ξέρεις την επίδραση που έχουν τα indexes στα database operations. Τι γίνεται με τα index rebuilds, με τα drops και τα creates. Πως επιδρά ένα index στο μέγεθος της βάσης. Τι γίνεται με τo backup και το restore.
Τέλος, αυτό που δεν χρειάζεται να ξέρεις είναι διάφοροι «γενικοί» κανόνες που κυκλοφορούν σε forums. Το index tunning είναι tailor made. Υπάρχει μεγάλη άγνοια για το συγκεκριμένο θέμα και το έχω παρατηρήσει όποτε κάνω μάθημα και λέω στους μαθητές μου ότι το clustered index ΔΕΝ μπαίνει σχεδόν ποτέ στο primary key! Οι περίσσοτεροι δεν το δέχονται παρά μόνο αφού τους δείξω το πώς και το γιατί.
Οπότε τι μπορείς να κάνεις:
- Τίποτα. Αν η βάση είναι μικρή και το σίδερο επαρκές, τότε δεν θα δεις ιδιαίτερες διαφορές
- Ξεκίνα με το default indexing που κάνει ο SQL Server και στην πορεία τρέξε τον Index Tunning Wizard. Σε γενικές γραμμές, αν δεν χρειάζεσαι κάτι εξεζητημένο, θα σου πει σωστά πράγματα.
- Αν διαβάσεις τα παραπάνω και νοιώθεις σίγουρος, πάρε τα πράγματα στα χέρια σου.
Vir prudens non contra ventum mingit