Αλλαγές στη διαχείριση των indexes
Άλλη μια αλλαγή στο νέο SQL Server είναι ο τρόπος με τον οποίο μπορούμε να διαχειριστούμε τα indexes. Πλέον έχει προστεθεί functionality στην εντολή ALTER INDEX και δεν είναι υποχρεωτικό να χρησιμοποιούμε τα DBCC statements. Έτσι, μπορούμε να κάνουμε τα παρακάτω:
- Disable ένα index
ALTER INDEX <index_name> ΟΝ <table_name> DISABLE
- Rebuild ένα index
ALTER INDEX <index_name> ΟΝ <table_name> REBUILD
Αυτό αντιστοιχεί με το DBCC DBREINDEX και πέραν του προφανή λόγου που χρησιμοποιείται κάνει επίσης enable ένα index που έχουμε κάνει disable με το προηγούμενο statement (Λογικό αυτό γιατί το disabled index έχει «μείνει» στα παλιά data).
- Reorganize index
ALTER INDEX <index_name> ΟΝ <table_name> REORGANIZE
Αυτό αντιστοιχεί με το DBCC INDEXDEFRAG δηλαδή είναι on-line operation (όπερ σημαίνει ότι δεν γίνονται locks που να επηρεάζουν την ομαλή λειτουργία του πίνακα) όμως παίζει μόνο στο leaf-level του index.
Επίσης, κατά το ALTER INDEX και CREATE INDEX υπάρχουν και κάποια index options όπως ONLINE = {ON | OFF}, ALLOW_ROW_LOCKS
= {ON | OFF}, ALLOW_PAGE_LOCKS = {ON | OFF} και MAXDOP = number_of_processors
Σε ότι αφορά τα indexes, μια αλλαγή που έχει να κάνει με το performance είναι ότι πλέον μπορούμε να συμπεριλάβουμε σε ένα nonclustered index και πεδία που δεν είναι κλειδιά. Μάλιστα, αυτά τα πεδία δεν προσμετράνε στον περιορισμό των 16 πεδίων ανά index. Ουσιαστικά, αυτό που γίνεται είναι να «ανεβαίνουν» τα πεδία από τα data pages του πίνακα, στα leaf-pages του index και έτσι, μπορούμε να δημιουργήσουμε ευκολότερα covering indexes. Ο τρόπος για να κάνουμε τα προηγούμενα είναι στο CREATE INDEX statement να προσθέσουμε στο τέλος ένα INCLUDE με τα πεδία που μας ενδιαφέρουν.
Τέλος, μπορούμε να δημιουργήσουμε και partioned indexes ακολουθώντας σχεδόν την ίδια διαδικασία με τα partitioned tables.