Επισκόπηση Τι είναι ένας ενιαίος δείκτης και τι ένας σύνθετος δείκτης; Πότε να δημιουργήσω ένα νέο σύνθετο ευρετήριο και τι πρέπει να προσέξω στο σύνθετο ευρετήριο; Αυτό το άρθρο είναι κυρίως μια περίληψη ορισμένων συζητήσεων στο Διαδίκτυο.
Ένα. Έννοια
Ένα μεμονωμένο ευρετήριο είναι μια κατάσταση όπου το ευρετήριο παρατίθεται σε μία στήλη, δηλαδή, η δήλωση δημιουργίας ενός νέου ευρετηρίου υλοποιείται μόνο σε μία στήλη.
Οι χρήστες μπορούν να δημιουργήσουν ευρετήρια σε πολλές στήλες, τα οποία ονομάζονται σύνθετα ευρετήρια (συνδυασμένα ευρετήρια). Τα σύνθετα ευρετήρια δημιουργούνται με τον ίδιο ακριβώς τρόπο όπως τα μεμονωμένα ευρετήρια. Ωστόσο, τα σύνθετα ευρετήρια απαιτούν λιγότερα έξοδα κατά τη διάρκεια των λειτουργιών της βάσης δεδομένων και μπορούν να αντικαταστήσουν πολλά μεμονωμένα ευρετήρια. Όταν ο αριθμός των σειρών σε έναν πίνακα είναι πολύ μεγαλύτερος από τον αριθμό των κλειδιών, αυτή η μέθοδος μπορεί να επιταχύνει σημαντικά την ταχύτητα ερωτήματος του πίνακα.
Υπάρχουν δύο έννοιες ταυτόχρονα, τα στενά ευρετήρια και τα ευρεία, τα στενά ευρετήρια αναφέρονται σε ευρετήρια με 1-2 στήλες και γενικά αναφέρονται σε ένα μόνο ευρετήριο, εκτός εάν ορίζεται διαφορετικά. Ένα ευρύ ευρετήριο είναι ένα ευρετήριο με περισσότερες από 2 στήλες.
Μια σημαντική αρχή του σχεδιασμού ευρετηρίου είναι η χρήση στενών ευρετηρίων αντί για ευρείες ευρετήρια, επειδή τα στενά ευρετήρια τείνουν να είναι πιο αποτελεσματικά από τα συνδυασμένα ευρετήρια. Η ύπαρξη πιο στενών ευρετηρίων θα δώσει στον βελτιστοποιητή περισσότερες επιλογές, κάτι που συχνά βοηθά στη βελτίωση της απόδοσης.
Δύο. Χρήση
Δημιουργία ευρετηρίου Δημιουργία ευρετηρίου IDX1 στον Πίνακα 1 (COL1, COL2, COL3) Εξετάζω επιλέξτε * από τον πίνακα 1 όπου col1= A και col2= B και col3 = C
Αυτή τη στιγμή, το εργαλείο βελτιστοποίησης ερωτημάτων δεν σαρώνει τον πίνακα, αλλά λαμβάνει απευθείας τα δεδομένα από το ευρετήριο, επειδή υπάρχουν αυτά τα δεδομένα στο ευρετήριο, το οποίο ονομάζεται ερώτημα επικάλυψης και η ταχύτητα του ερωτήματος είναι πολύ γρήγορη.
Τρεις. Σημειώσεις:
1. Πότε να χρησιμοποιήσετε έναν σύνθετο δείκτη Στη συνθήκη where, το πεδίο ευρετηριάζεται και εάν χρησιμοποιούνται πολλά πεδία, χρησιμοποιείται ένα σύνθετο ευρετήριο. Γενικά, μην δημιουργείτε ευρετήρια στο πεδίο επιλογής (εάν θέλετε να υποβάλετε ερώτημα για την επιλογή col1, col2, col3 από το mytable, δεν χρειάζεστε το παραπάνω ευρετήριο). Η ευρετηρίαση με βάση τις συνθήκες είναι μια εξαιρετικά σημαντική αρχή. Προσέξτε να μην χρησιμοποιείτε πάρα πολλά ευρετήρια, διαφορετικά θα έχει μεγάλο αντίκτυπο στην αποτελεσματικότητα των ενημερώσεων πινάκων, επειδή πρέπει να αφιερώσετε πολύ χρόνο στη δημιουργία ευρετηρίων κατά τη λειτουργία πινάκων.
2. Για σύνθετα ευρετήρια, όταν χρησιμοποιείτε ερώτημα, είναι καλύτερο να ακολουθείτε τη σειρά εύρεσης ευρετηρίων, η οποία είναι η πιο αποτελεσματική. Για παράδειγμα: IDX1: δημιουργία ευρετηρίου IDX1 στον πίνακα 1 (col2, col3, col5) επιλέξτε * από τον πίνακα 1 όπου col2=A και col3=B και col5=D
Αν είναι "επιλέξτε * από τον πίνακα 1 όπου col3=B και col2=A και col5=D" Ή "επιλέξτε * από τον πίνακα 1 όπου col3=B" δεν θα χρησιμοποιήσει το ευρετήριο ή το αποτέλεσμα δεν είναι αισθητό
3. Ένας σύνθετος δείκτης θα αντικαταστήσει έναν μόνο δείκτη; Πολλοί άνθρωποι πιστεύουν ότι η προσθήκη οποιουδήποτε πεδίου στο ομαδοποιημένο ευρετήριο μπορεί να βελτιώσει την ταχύτητα του ερωτήματος, αλλά μερικοί άνθρωποι μπερδεύονται: Εάν τα σύνθετα πεδία ομαδοποιημένου ευρετηρίου ερωτηθούν ξεχωριστά, θα επιβραδυνθεί η ταχύτητα του ερωτήματος; Με αυτήν την ερώτηση, ας ρίξουμε μια ματιά στην ακόλουθη ταχύτητα ερωτήματος (το σύνολο αποτελεσμάτων είναι 250,000 κομμάτια δεδομένων) :( στήλη ημερομηνίας fariqi κατατάσσεται πρώτη στην αρχική στήλη του σύνθετου ευρετηρίου συγκέντρωσης και το όνομα χρήστη neibuyonghu κατατάσσεται δεύτερο)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) επιλέξτε gid, fariqi, neibuyonghu, τίτλο από το Tgongwen όπου fariqi>'2004-5-5'
Ταχύτητα ερωτήματος: 2513 ms
(2) επιλέξτε gid, fariqi, neibuyonghu, τίτλο από το Tgongwen όπου fariqi>'2004-5-5' και neibuyonghu='γραφείο'
Ταχύτητα ερωτήματος: 2516 ms
(3) επιλέξτε gid, fariqi, neibuyonghu, τίτλο από το Tgongwen όπου neibuyonghu='γραφείο'
Ταχύτητα ερωτήματος: 60280 χιλιοστά του δευτερολέπτου
Από τα παραπάνω πειράματα, μπορούμε να δούμε ότι εάν χρησιμοποιείται μόνο η αρχική στήλη του ομαδοποιημένου ευρετηρίου ως συνθήκη ερωτήματος, η ταχύτητα ερωτήματος όλων των στηλών με το σύνθετο ομαδοποιημένο ευρετήριο είναι σχεδόν η ίδια, ακόμη και ελαφρώς ταχύτερη από τη χρήση όλων των στηλών σύνθετου ευρετηρίου (όταν ο αριθμός των συνόλων αποτελεσμάτων ερωτήματος είναι ο ίδιος). Εάν χρησιμοποιούνται μόνο οι μη αρχικές στήλες του σύνθετου συγκεντρωτικού ευρετηρίου ως συνθήκες ερωτήματος, αυτό το ευρετήριο δεν θα κάνει τίποτα. Φυσικά, η ταχύτητα ερωτήματος των δηλώσεων 1 και 2 είναι η ίδια επειδή ο αριθμός των καταχωρήσεων στο ερώτημα είναι ο ίδιος, εάν χρησιμοποιούνται όλες οι στήλες του σύνθετου ευρετηρίου και τα αποτελέσματα του ερωτήματος είναι λίγα, αυτό θα σχηματίσει μια "παράκαμψη ευρετηρίου", έτσι ώστε η απόδοση να μπορεί να βελτιστοποιηθεί. Επίσης, λάβετε υπόψη ότι ανεξάρτητα από το αν χρησιμοποιείτε συχνά άλλες στήλες στο συγκεντρωτικό ευρετήριο, η αρχική στήλη πρέπει να είναι αυτή που χρησιμοποιείται συχνότερα.
[Αναφορά: Σχήμα αλγορίθμου βελτιστοποίησης ερωτημάτων και σελιδοποίησης http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Χρειάζεται να δημιουργήσω ένα μόνο ευρετήριο και ένα σύνθετο ευρετήριο στην ίδια στήλη ταυτόχρονα; Πείραμα: Πίνακας Sysbase 5.0 Πεδία πίνακα1: col1, col2, col3
Βήματα δοκιμής: (1) Δημιουργήστε το ευρετήριο idx1 στη στήλη 1 Εκτελέστε την επιλογή * από τον πίνακα 1 όπου το col1=A χρησιμοποιεί idx1 Εκτελέστε την επιλογή * από τον πίνακα 1 όπου col1=A και col2=B χρησιμοποιούν επίσης idx1
(2) Διαγράψτε το ευρετήριο idx1 και, στη συνέχεια, δημιουργήστε ένα idx2 στο σύνθετο ευρετήριο (col1,col2) Και τα δύο ερωτήματα χρησιμοποιούν idx2
(3) Εάν υπάρχουν και οι δύο δείκτες idx1 και idx2 Δεν είναι όπου col1='A' χρησιμοποιεί idx1, όπου col1=A και col2=B χρησιμοποιεί idx2. Το εργαλείο βελτιστοποίησης ερωτημάτων χρησιμοποιεί ένα από τα ευρετήρια που χρησιμοποιούνταν συνήθως στο παρελθόν. Χρησιμοποιήστε είτε idx1 είτε idx2.
Μπορεί να φανεί ότι (1) Για έναν πίνακα, εάν υπάρχει σύνθετος δείκτης στο (col1, col2), δεν χρειάζεται να δημιουργηθεί ταυτόχρονα ένας μόνο δείκτης στο col1. (2) Εάν το απαιτούν οι συνθήκες ερωτήματος, μπορείτε να προσθέσετε τον σύνθετο δείκτη στο (col1, col2) όταν υπάρχει ήδη ένας ενιαίος δείκτης στο col1, ο οποίος μπορεί να βελτιώσει την απόδοση σε κάποιο βαθμό. (3) Δεν υπάρχουν ιδιαίτερα πολλά οφέλη από τη δημιουργία ενός σύνθετου ευρετηρίου με πολλαπλά πεδία (που περιέχουν 5 ή 6 πεδία) ταυτόχρονα, σχετικά μιλώντας, η δημιουργία ενός ευρετηρίου με πολλά στενά πεδία (που περιέχει μόνο ένα ή το πολύ 2 πεδία) μπορεί να επιτύχει καλύτερη αποτελεσματικότητα και ευελιξία.
5. Χρειάζεται να καλύψω το ερώτημα; Γενικά είναι καλύτερο να μην χρησιμοποιείτε μια στρατηγική που δίνει έμφαση στην πλήρη κάλυψη ερωτημάτων. Εάν όλες οι στήλες στον όρο επιλογής αντικατασταθούν από ένα μη ομαδοποιημένο ευρετήριο, ο βελτιστοποιητής θα το αναγνωρίσει και θα παρέχει καλές επιδόσεις. Ωστόσο, αυτό συχνά οδηγεί σε υπερβολικά ευρύ ευρετήριο και υπερβολική εξάρτηση από την πιθανότητα ο βελτιστοποιητής να χρησιμοποιήσει την πολιτική. Συνήθως, τα στενά ευρετήρια χρησιμοποιούνται για μεγαλύτερο αριθμό ερωτημάτων, γεγονός που παρέχει καλύτερες επιδόσεις για μεγάλα ερωτήματα. |