τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Πίνακας περιεχομένων
Τι είδους πεδία επιλέγουμε συνήθως για τη δημιουργία ευρετηρίων;
Είναι καλύτεροι περισσότεροι δείκτες;
Ποια είναι η πιο αριστερή αρχή αντιστοίχισης;
Αριστερή σειρά ερωτήματος αντιστοίχισης αρχής
Τι είναι η pushdown δείκτη; Προστέθηκε στο MySQL5.6 για βελτιστοποίηση ερωτημάτων δεδομένων
Πώς να δημιουργήσετε ένα ευρετήριο όπου a>1 και b=2 και c <3;
(A,B,C) επιλέξτε * από tbn όπου a= και b στο (?,?) και c>;
Πώς να δημιουργήσετε ένα κοινό ευρετήριο όπου a>100 και b=100 και c=123 διατάσσονται κατά d;
Έμαθα ότι έχει η MySQLπρωτεύων κλειδίΕυρετήριο, μοναδικό ευρετήριο, συνηθισμένο ευρετήριο, ευρετήριο προθέματος,δείκτης της ΈνωσηςΑυτοί οι τύποι ευρετηρίων.
Η μηχανή Innodb απαιτεί ότι κάθε πίνακας βάσης δεδομένων πρέπει να έχει έναπρωτεύων κλειδίδείκτης,Οι τιμές στηλών ευρετηρίου δεν επιτρέπονταιμηδενική τιμή。Για παράδειγμα, το πεδίο id στον πίνακα είναι το ευρετήριο του πρωτεύοντος κλειδιού
Μοναδικό ευρετήριο: Διασφαλίστε τη μοναδικότητα κάθε σειράς δεδομένων στη στήλη δεδομένων, αλλά επιτρέψτε μηδενικές τιμές.
ΕπειταΓια πεδία που υποβάλλονται συχνά ερωτήματα, μπορούμε να δημιουργήσουμε ένα κανονικό ευρετήριο για αυτό το πεδίο.,Εάν υπάρχουν πολλά πεδία, μπορείτε να σκεφτείτε να δημιουργήσετεδείκτης της Ένωσης,χρήσηκάλυψη ευρετηρίουΤα χαρακτηριστικά βελτιώνουν την αποτελεσματικότητα των ερωτημάτων.
Για μεγάλο κείμενο, συμβολοσειρά και άλλους τύπους πεδίων, όπως τίτλους άρθρων, ονόματα προϊόντων κ.λπ., μπορούμε να καταχωρίσουμε μόνο το τμήμα του προθέματος αυτών των πεδίων, δηλαδήΔημιουργήστε ένα ευρετήριο προθέματος για να μειώσετε τον αποθηκευτικό χώρο του ευρετηρίου.
Ένα μοναδικό ευρετήριο μπορεί να είναι ελαφρώς πιο γρήγορο κατά την υποβολή ερωτήματος για μια μεμονωμένη τιμή, επειδή μπορεί να τερματίσει την αναζήτηση μετά την εύρεση της πρώτης αντιστοίχισης.
Για λειτουργίες εισαγωγής και ενημέρωσης, ένα κανονικό ευρετήριο μπορεί να είναι ελαφρώς πιο γρήγορο επειδή δεν απαιτεί ελέγχους μοναδικότητας.
Οι τιμές των συνηθισμένων στηλών ευρετηρίου μπορούν να επαναληφθούν, αλλά οι τιμές των στηλών μοναδικού ευρετηρίου πρέπει να είναι μοναδικές Όταν εισάγουμε μια επαναλαμβανόμενη τιμή σε ένα μοναδικό ευρετήριο, θα αναφερθεί ένα σφάλμα λόγω του περιορισμού μοναδικότητας.
ΝομίζωΗ απόδοση ενημέρωσης του συνηθισμένου ευρετηρίου θα είναι καλύτερη, επειδή όταν ενημερώνεται το συνηθισμένο ευρετήριο, εάν η ενημερωμένη σελίδα δεδομένων δενΜνήμη Εάν ναι, μπορείτε να αποθηκεύσετε απευθείας τη λειτουργία ενημέρωσης στην προσωρινή μνήμη στο buffer αλλαγής και η λειτουργία ενημέρωσης θα ολοκληρωθεί. (δεν απαιτείται έλεγχος μοναδικότητας)
αλλά,Το μοναδικό ευρετήριο πρέπει να έχει μοναδικούς περιορισμούς Εάν η ενημερωμένη σελίδα δεδομένων δεν βρίσκεται στοΜνήμηΕάν ναι, πρέπει να διαβάσετε την αντίστοιχη σελίδα δεδομένων από το δίσκο στη μνήμη για να προσδιορίσετε εάν υπάρχει σύγκρουση Αυτό θα περιλαμβάνει τυχαιοποίηση δίσκου.IOΠρόσβαση.
Επειδή τα συνηθισμένα ευρετήρια μπορούν να χρησιμοποιήσουν τη δυνατότητα αλλαγής προσωρινής αποθήκευσης, η ενημέρωση των συνηθισμένων ευρετηρίων είναι ταχύτερη από εκείνη των μοναδικών ευρετηρίων.Μειώθηκε η τυχαία πρόσβαση στο δίσκο, επομένως η απόδοση της ενημέρωσης είναι καλύτερη
Όταν το InnoDB δημιουργεί ένα ευρετήριο συμπλέγματος, θα επιλέξει διαφορετικές στήλες ως ευρετήρια σύμφωνα με διαφορετικά σενάρια:
Εάν υπάρχει πρωτεύον κλειδί, το πρωτεύον κλειδί θα χρησιμοποιηθεί ως κλειδί ευρετηρίου του συμπλεγμένου ευρετηρίου από προεπιλογή.
Εάν δεν υπάρχει πρωτεύον κλειδί, επιλέξτεΤο πρώτο δεν περιέχει NULL τιμήΗ μόνη στήλη του είναι ωςομαδοποιημένος δείκτηςκλειδί ευρετηρίου
Ελλείψει κανενός από τα παραπάνω, το InnoDB θα δημιουργήσει αυτόματα μια σιωπηρή στήλη σειράς αυτόματης αύξησης ως κλειδί ευρετηρίου του συμπλέγματος ευρετηρίου.
Σενάρια όπου εφαρμόζεται ευρετηρίαση:
Τα πεδία έχουν περιορισμούς μοναδικότητας, όπως ο κωδικός προϊόντος
Πεδία που χρησιμοποιούνται συχνά σε συνθήκες ερωτήματος WHERE, το οποίο μπορεί να βελτιώσει την ταχύτητα ερωτήματος ολόκληρου του πίνακα Εάν η συνθήκη ερωτήματος δεν είναι πεδίο, μπορεί να δημιουργηθεί ένα κοινό ευρετήριο
Πεδία που χρησιμοποιούνται συχνά σε GROUPBY και ORDER BY, έτσι ώστε να μην χρειάζεται ξανά ταξινόμηση κατά την αναζήτηση, επειδή οι εγγραφές στη Δένδρα B+ ταξινομούνται όλες μετά τη δημιουργία του ευρετηρίου.
Σενάρια ακατάλληλα για ευρετηρίαση
Τα πεδία δεν χρησιμοποιούνται σε συνθήκες WHERE, GROUP BY, ORDER BY, η τιμή του ευρετηρίου είναι γρήγορη τοποθέτηση Εάν το πεδίο δεν μπορεί να τοποθετηθεί, συνήθως δεν χρειάζεται να δημιουργήσετε ένα ευρετήριο, επειδή το ευρετήριο θα καταλάβει φυσικό χώρο.
Πεδία με χαμηλή διάκριση , δεν χρειάζεται να δημιουργηθεί ένα ευρετήριο, για παράδειγμα, το πεδίο φύλο έχει μόνο άνδρες και γυναίκες Εάν οι εγγραφές ανδρών και γυναικών είναι ομοιόμορφα κατανεμημένες στον πίνακα της βάσης δεδομένων, τότε ανεξάρτητα από το ποια τιμή θα γίνει αναζήτηση, τα μισά από τα δεδομένα ενδέχεται. να αποκτηθεί.Σε αυτές τις περιπτώσεις, είναι προτιμότερο να μην γίνεται ευρετήριο γιατί MySQLΥπάρχει ακόμα έναεργαλείο βελτιστοποίησης ερωτημάτων, όταν το πρόγραμμα βελτιστοποίησης ερωτημάτων διαπιστώσει ότι μια συγκεκριμένη τιμή εμφανίζεται σε υψηλό ποσοστό σειρών δεδομένων στον πίνακα, γενικά θα αγνοήσει το ευρετήριο και θα εκτελέσειΠλήρης σάρωση τραπεζιού。
Πεδία που ενημερώνονται συχνά, για παράδειγμα, μην ευρετηριάζετε το υπόλοιπο χρήστη των έργων ηλεκτρονικού εμπορίου επειδή τα πεδία ευρετηρίου τροποποιούνται συχνά.διατηρω Β+Δέντροτακτοποίηση, τότε απαιτείται συχνή ανακατασκευή ευρετηρίου και αυτή η διαδικασία θα επηρεάσει την απόδοση της βάσης δεδομένων.
Δεν συνιστάται η χρήση μη ταξινομημένων τιμών(όπως κάρτα ταυτότητας, UUID) ως ευρετήριο, όταν το πρωτεύον κλειδί είναι αβέβαιο, θα προκαλέσει συχνό διαχωρισμό των κόμβων φύλλων και κατακερματισμό της αποθήκευσης του δίσκου.
Ο πίνακας δεδομένων είναι μικρότερος: Όταν ο όγκος των δεδομένων σε έναν πίνακα είναι μικρός ή όταν ένα ερώτημα απαιτεί σάρωση μεγάλου τμήματος των δεδομένων στον πίνακα, το εργαλείο βελτιστοποίησης βάσης δεδομένων μπορεί να επιλέξει μια πλήρη σάρωση πίνακα αντί να χρησιμοποιεί ευρετήριο. Σε αυτή την περίπτωση, το κόστος διατήρησης του δείκτη μπορεί να είναι μεγαλύτερο από το κέρδος απόδοσης.
Όχι, αν και τα ευρετήρια μπορούν να βελτιώσουν την αποτελεσματικότητα του ερωτήματος, η δημιουργία ενός ακόμη ευρετηρίου σημαίνει ότι θα δημιουργηθεί ένας νέος δείκτης δέντρου B+, ο οποίος θα καταλαμβάνει χώρο αποθήκευσης, ειδικά όταν ο όγκος των δεδομένων του πίνακα είναι πολύ μεγάλος, το ευρετήριο θα καταλαμβάνει περισσότερο χώρο.
Όσο περισσότερα ευρετήρια υπάρχουν, η απόδοση εγγραφής της βάσης δεδομένων θα μειώνεται, γιατί κάθε φορά που προσθέτετε, διαγράφετε ή τροποποιείτε τον πίνακα, πρέπει να διατηρείτε την τάξη κάθε ευρετηρίου δέντρου B+.
Έχω χρησιμοποιήσει αυτές τις μεθόδους βελτιστοποίησης
Για SQL που χρειάζεται να ρωτήσει δεδομένα σε πολλά πεδία, μπορούμε να δημιουργήσουμεδείκτης της Ένωσης, οπότε γίνεται η μέθοδος ερωτήματοςευρετήριο κάλυψης, αποφεύγοντας την υποστήριξη πίνακα και μειώνοντας μεγάλο αριθμό λειτουργιών I/O.
μαςπρωτεύων κλειδίΟι δείκτες είναι κατά προτίμηση αυξανόμενες τιμές, επειδή το ευρετήριό μας αποθηκεύει δεδομένα με τη σειρά, εάν η τιμή του πρωτεύοντος κλειδιού είναι μια τυχαία τιμή, μπορεί να προκαλέσει διαχωρισμό σελίδας θα προκαλέσει μεγάλο αριθμό θραυσμάτων μνήμης, έτσι ώστε η δομή του ευρετηρίου να μην είναι συμπαγής επηρεάζουν την αποτελεσματικότητα των ερωτημάτων.
θέλουμεΑποφύγετε τη διαγραφή αποτυχίας ευρετηρίου SQL Δηλώσεις, όπως να μην εκτελείται αριστερή ή αριστερή ασαφής αντιστοίχιση σε στήλες ευρετηρίου, να μην εκτελούνται υπολογισμοί, συναρτήσεις, πράξεις μετατροπής τύπων στο ευρετήριο και η σωστή χρήση των κοινών ευρετηρίων πρέπει να ακολουθεί την αρχή αντιστοίχισης στο αριστερό μέρος κ.λπ.Στην ρήτρα WHERE, εάν η στήλη συνθήκης πριν από το OR είναι στήλη ευρετηρίου και η στήλη συνθήκης μετά το OR δεν είναι στήλη ευρετηρίου, το ευρετήριο θα αποτύχει.
Χρήση όχι ίση με (
<>
) ή τελεστής NOT: Αυτοί οι τελεστές συνήθως ακυρώνουν το ευρετήριο επειδή σαρώνουν ολόκληρο τον πίνακα.Ο τελεστής OR: Εάν το OR χρησιμοποιείται στη συνθήκη ερωτήματος και οι συνθήκες και στις δύο πλευρές του OR περιλαμβάνουν διαφορετικά ευρετήρια, τότε αυτά τα ευρετήρια ενδέχεται να μην χρησιμοποιούνται.
χρήση
OR
χειριστή, εάνOR
Οι συνθήκες και στις δύο πλευρές περιλαμβάνουν διαφορετικά ευρετήρια και η μηχανή βάσης δεδομένων δεν μπορεί να χρησιμοποιήσει πολλαπλά ευρετήρια ταυτόχρονα για να βελτιστοποιήσει το ερώτημα στις περισσότερες περιπτώσεις.Αυτό είναιεπειδήOR
Ο χειριστής χρειάζεται μόνο να πληροί τις προϋποθέσεις και στις δύο πλευρές, γεγονός που αυξάνει την πολυπλοκότητα της βελτιστοποίησης ερωτημάτων.
Ευρετήριο για κάποια μεγάλη συμβολοσειρά, μπορούμε να εξετάσουμε το ενδεχόμενο χρήσηςευρετήριο προθέματοςΜόνο το τμήμα του προθέματος της στήλης ευρετηρίου ευρετηριάζεται για εξοικονόμηση χώρου αποθήκευσης ευρετηρίου και βελτίωση της απόδοσης του ερωτήματος.
Ο δείκτης έχει οριστεί καλύτερα στο NOT ΜΗΔΕΝΙΚΟ : Προκειμένου να χρησιμοποιηθεί καλύτερα το ευρετήριο, η στήλη ευρετηρίου θα πρέπει να οριστεί σε περιορισμό NOT NULL. Υπάρχουν δύο λόγοι:
Η παρουσία του NULL στις στήλες ευρετηρίου θα κάνει την επιλογή ευρετηρίου του βελτιστοποιητή πιο περίπλοκη, καθιστώντας πιο δύσκολη τη βελτιστοποίηση λειτουργιών όπως η καταμέτρηση.
Η τιμή NULL είναι μια τιμή χωρίς νόημα, αλλά θα καταλάβει φυσικό χώρο Υπάρχει μια στήλη μηδενικής τιμής.Τουλάχιστον 1 byte χώρου θα χρησιμοποιηθεί για την αποθήκευση NULL λίστα αξιών
όχι.
ΕμαθαΑκόμα κι αν το ερώτημα χρησιμοποιεί ευρετήριο, ενδέχεται να μην χρησιμοποιήσει το ευρετήριο.
Για παράδειγμα: όταν η δήλωση ερωτήματός μας εκτελεί λειτουργίες αριστερής ασαφούς αντιστοίχισης, υπολογισμού εκφράσεων, συνάρτησης και μετατροπής σιωπηρού τύπου στο πεδίο ευρετηρίου, τότε η πρόταση ερωτήματος δεν μπορεί να περάσει από το ευρετήριο και η μέθοδος ερωτήματος γίνεται σάρωση πλήρους πίνακα.
Και χρησιμοποιούμεδείκτης της ΈνωσηςΚατά την υποβολή ερωτήματος, εάν δεν τηρηθεί η αρχή αντιστοίχισης στο αριστερό μέρος, θα προκύψει επίσης αποτυχία ευρετηρίου.。
Ο βελτιστοποιητής είναιΕπιλέξτε μια μέθοδο ερωτήματος με βάση το κόστος, όταν χρησιμοποιείται το δευτερεύον ευρετήριο για το ερώτημα, ο βελτιστοποιητής θα υπολογίσει το κόστος της επιστροφής πίνακα και το κόστος της πλήρους σάρωσης πίνακα, εάν το κόστος επιστροφής πίνακα είναι πολύ υψηλό, ο βελτιστοποιητής θα επιλέξει να μην χρησιμοποιήσει το ευρετήριο πλήρης σάρωση τραπεζιού.
Δεν θα χτυπήσει τον δείκτη.
Επειδή η mysql συναντάΣύγκριση συμβολοσειρών και αριθμώνθα συμβεί ότανσιωπηρή μετατροπή τύπου, θαΜετατροπή αντικειμένου συμβολοσειράς σε αριθμό, αυτή η διαδικασία μετατροπής περιλαμβάνει στην πραγματικότηταλειτουργία . Στο ερώτημα που αναφέρατε, το πεδίο ημερομηνίας είναι μια συμβολοσειρά, επομένως, όταν πραγματοποιείται μετατροπή σιωπηρού τύπου, θα εφαρμοστεί στο πεδίο ευρετηρίου ημερομηνίας Εάν εκτελεστεί υπολογισμός συνάρτησης στο ευρετήριο, το ευρετήριο θα καταστεί άκυρο.
Για στήλες ευρετηρίου ακέραιου τύπου, για παράδειγμα
id
Στήλη της οποίας η τιμή αποθηκεύεται απευθείας στο ευρετήριο χωρίς να πραγματοποιηθεί υπολογισμός συνάρτησης.Αυτό σημαίνει χρήση στο ερώτημαid
Κατά την αντιστοίχιση, δεν είναι απαραίτητοid
Εκτελέστε οποιουσδήποτε λειτουργικούς υπολογισμούς ή μετατροπές και απλώς συγκρίνετε ακέραιες τιμές.
Έμαθα ότι η MySQL8.0 μπορεί να προσθέσει πεδίαευρετήριο συνάρτησης, αυτή η νέα δυνατότητα μπορεί να λύσει το πρόβλημα της αποτυχίας του ευρετηρίου κατά τη χρήση συναρτήσεων στο ευρετήριο.
Ένα άλλο νέο χαρακτηριστικό είναισάρωση παράλειψης ευρετηρίου, Πριν από την έκδοση 5.7, όταν χρησιμοποιείτε ένα κοινό ευρετήριο, εάν δεν τηρείται η αρχή αντιστοίχισης στο αριστερό, θα προκύψει αποτυχία ευρετηρίου, ωστόσο, μετά την εισαγωγή της δυνατότητας σάρωσης παράβλεψης ευρετηρίου στην έκδοση 8.0, τα κοινά ευρετήρια μπορούν να χρησιμοποιηθούν ακόμα και αν η αρχή αντιστοίχισης είναι η πιο αριστερή. δεν ακολουθείται.
Ας υποθέσουμε ότι υπάρχει ένας κοινός δείκτης (a, b, c) Η σειρά αποθήκευσης του είναι να ταξινομεί κατά a πρώτα, μετά να ταξινομεί κατά b όταν το a είναι το ίδιο και μετά να ταξινομεί κατά c όταν το b είναι το ίδιο. Λόγω αυτής της δυνατότητας, όταν χρησιμοποιούνται κοινά ευρετήρια, υπάρχει μια αρχή αντιστοίχισης στο αριστερό μέρος Οι συγκεκριμένοι κανόνες είναι:
Το ομοσπονδιακό ευρετήριο της MySQL θα ξεκινήσει απόΗ πιο αριστερή στήλη ευρετηρίου αρχίζει να ταιριάζει με τις συνθήκες του ερωτήματος και, στη συνέχεια, ταιριάζει με τη σειρά από αριστερά προς τα δεξιά.
Όταν χρησιμοποιείται μια στήλη στη συνθήκη ερωτήματος,Ωστόσο, η τιμή αυτής της στήλης περιέχει ερώτημα εύρους και μπορούν να χρησιμοποιηθούν τα πεδία του ερωτήματος εύρουςδείκτης της Ένωσης, αλλά το κοινό ευρετήριο δεν μπορεί να χρησιμοποιηθεί στα πεδία πίσω από το πεδίο ερωτήματος εύρους.
Επομένως, όταν χρησιμοποιούμε κοινά ευρετήρια, πρέπει να τηρούμε την αρχή αντιστοίχισης στο αριστερό μέρος, διαφορετικά ορισμένα πεδία ευρετηρίου ενδέχεται να μην είναι ευρετηριασμένα.
πλέονΒάλτε τα πεδία με μεγαλύτερη διάκρισηδείκτης της Ένωσηςάκρα αριστερά, βοηθητικόςΒελτιώστε το εφέ φιλτραρίσματος ευρετηρίου, πεδία όπως το UUID είναι πιο κατάλληλα για ευρετηρίαση ή κατάταξη στην κορυφή της στήλης κοινού ευρετηρίου.
Εάν ένα πεδίο με χαμηλή διάκριση τοποθετηθεί στην αριστερή πλευρά του κοινού ευρετηρίου, το εργαλείο βελτιστοποίησης ερωτημάτων μπορεί να επιλέξει να σαρώσει ολόκληρο τον πίνακα αντί να χρησιμοποιήσει το ευρετήριο.
Η πιο αριστερή αρχή αντιστοίχισης του κοινού ευρετηρίου, σεΌταν αντιμετωπίζετε ένα ερώτημα εύρους (όπως >, <), η αντιστοίχιση θα σταματήσει, δηλαδή, τα πεδία του ερωτήματος εύρους μπορούν να χρησιμοποιούν το κοινό ευρετήριο, αλλά τα πεδία πίσω από το πεδίο ερωτήματος εύρους δεν μπορούν να χρησιμοποιούν το κοινό ευρετήριο.Ωστόσο, για τα τέσσερα ερωτήματα εύρους των >=, <=, BETWEEN, και όπως η αντιστοίχιση προθέματος, η αντιστοίχιση δεν θα σταματήσει.
Στη MySQL, το BETWEEN περιέχει οριακές τιμές value1 και value2, παρόμοιες με >= και =<.
Σύνδεσμος αναφοράς https://zhuanlan.zhihu.com/p/573138586
select * from T where c=1 and a=2 and b=3;
Το abc μπορεί να ευρετηριαστεί επειδή Η σειρά των πεδίων συνθήκης ερωτήματος δεν επηρεάζει, το εργαλείο βελτιστοποίησης MySQL θα μας βοηθήσει να προσαρμόσουμε τη σειρά ερωτημάτων των πεδίων, ώστε να συμμορφώνεται επίσης με την αρχή αντιστοίχισης στο αριστερό μέρος.
Η πίεση προς τα κάτω του δείκτη μπορεί να μειωθείδευτερεύων δείκτηςΗ λειτουργία επιστροφής πίνακα κατά τη διάρκεια του ερωτήματος βελτιώνει την αποτελεσματικότητα του ερωτήματος επειδή θα το κάνει Το επίπεδο διακομιστή είναι υπεύθυνο για ορισμένα από τα πράγματα που διαχειρίζεται το στρώμα του κινητήρα αποθήκευσης.Πήγε να το αντιμετωπίσει.
Κατά τη βελτιστοποίηση push-down χωρίς τη χρήση συνθηκών ευρετηρίου, η μηχανή αποθήκευσης ανακτά τα δεδομένα μέσω του ευρετηρίου και στη συνέχεια τα επιστρέφει στον MySQL Server.MySQL Server Κάντε κρίσεις σχετικά με τις συνθήκες του φίλτρου.
Όταν χρησιμοποιείτε βελτιστοποίηση push-down συνθήκης ευρετηρίου, εάν υπάρχουν ορισμένες συνθήκες κρίσης για στήλες με ευρετήριο, ο MySQL Server θα ωθήσει αυτό το μέρος των συνθηκών κρίσης στη μηχανή αποθήκευσης και, στη συνέχεια, η μηχανή αποθήκευσης θα κρίνει εάν το ευρετήριο πληροί τις προϋποθέσεις που έχουν περάσει MySQL Server Μόνο όταν το ευρετήριο πληροί τις προϋποθέσεις, τα δεδομένα θα ανακτηθούν και θα επιστραφούν στον διακομιστή MySQL.
Η βελτιστοποίηση pushdown συνθήκης ευρετηρίου μπορεί να μειώσει τον αριθμό των φορών που η μηχανή αποθήκευσης ζητά τον υποκείμενο πίνακα και μπορεί επίσης να μειώσει MySQL Ο αριθμός των φορών που ο διακομιστής έλαβε δεδομένα από τη μηχανή αποθήκευσης.
select * from t_user where age > 20 and reward = 100000;
Δημιουργήστε (abc), (acb), (ab), (ac) κοινό ευρετήριο, μόνο ευρετήριο κουτιού
Δημιουργήστε κοινά ευρετήρια (cab), (cba), (ca), (cb), μόνο ο c μπορεί να ευρετηριάσει
Δημιουργήστε (ba) κοινό ευρετήριο, και το b και το a μπορούν να ευρετηριαστούν
Δημιουργήστε (bc) κοινό ευρετήριο, και το b και το c μπορούν να ευρετηριαστούν
δημιουργία (bac) δείκτης της Ένωσης, b και a μπορούν και τα δύο να ευρετηριαστούν, αλλά είναι πιο αργά από (βα) ο κοινός δείκτης έχει ένα ακόμη όφελος, το πεδίο c μπορείώθηση ευρετηρίου, θα μειώσει τον αριθμό των επιστροφών πίνακα.
δημιουργώ(π.Χ) δείκτης της Ένωσης, τόσο το b όσο και το c μπορούν να ευρετηριαστούν, αλλά έχει ένα περισσότερο πλεονέκτημα από τον κοινό δείκτη (bc), το πεδίο a μπορείώθηση ευρετηρίου, θα μειώσει τον αριθμό των επιστροφών πίνακα.
select * from tbn where a=? and b in (?,?) and c>?
Θα ευρετηριαστεί;Αυτό το ερώτημα θα χρησιμοποιήσει το κοινό ευρετήριο (A,B,C)
, επειδή η συνθήκη βασίζεται στη στήλη ευρετηρίου A
、B
、C
Έρχεται η παραγγελία, που είναι το ιδανικό σενάριο χρήσης.
Για A=?
: Αυτή η συνθήκη είναι μια ακριβής αντιστοίχιση Η MySQL θα χρησιμοποιήσει το ευρετήριο για να εντοπίσει τη συνθήκη που ικανοποιεί τη συνθήκη. A=?
ρεκόρ του.
Για B IN (?, ?)
: Αυτή η συνθήκη καθορίζει B
Η στήλη μπορεί να λάβει δύο πιθανές τιμές. Η MySQL θα χρησιμοποιήσει το ευρετήριο για να βρει όλες τις αντιστοιχίσειςA=?
καιB
Η στήλη είναι μια εγγραφή με οποιαδήποτε από αυτές τις δύο τιμές.
Για C>?
: Αυτή η συνθήκη είναι ένα ερώτημα εύρους.ήδη με βάσηA
καιB
Με βάση το φίλτρο, η MySQL θα συνεχίσει να χρησιμοποιεί το ευρετήριο για εύρεσηC
Εγγραφές με τιμές στήλης μεγαλύτερες από την καθορισμένη τιμή.
ΝομίζωΕγκαθιδρύω bcda για ναδείκτης της ΈνωσηςΚαλύτερα, αυτή τη στιγμή και τα δύο πεδία b και c μπορούν να ευρετηριαστούν καιΤο d μπορεί να χρησιμοποιήσει τη σειρά ευρετηρίου για να αποφύγει την ταξινόμηση αρχείων (επιπλέον ταξινόμηση), αν και το τελευταίο πεδίο a δεν μπορεί να ευρετηριαστεί (το a είναι εκτός λειτουργίας), μπορεί να ωθηθεί προς τα κάτω χρησιμοποιώντας το ευρετήριο για να μειώσει τον αριθμό των επιστροφών πίνακα.
Η σειρά του κοινού ευρετηρίου είναι πρώτα το όνομα και μετά η ηλικία.Επομένως, το εργαλείο βελτιστοποίησης πρέπει πρώτα να ταιριάζει με το όνομα Το όνομα είναι ένα σωστό ασαφές ερώτημα αυτήν τη στιγμή και δεν θα προκύψει αποτυχία ευρετηρίου, επομένως αυτή η SQL μπορεί να χρησιμοποιήσει κοινή ευρετηρίαση.
Συγκεκριμένα, μόνο το όνομα μπορεί να ευρετηριαστείΜετά το ασαφές ερώτημα του δεξιού ονόματος, οι τιμές του πεδίου ηλικία δεν είναι στη σειρά, επομένως η ηλικία δεν μπορεί να ευρετηριαστεί, αλλά η ηλικία μπορεί να ευρετηριαστεί.ώθηση ευρετηρίου。
Τα τελευταία πεδία που ζητήθηκαν είναι το id και το όνομα Αυτά τα δύο πεδία βρίσκονται στο κοινό ευρετήριο, επομένως δεν χρειάζεται να επιστρέψετε τον πίνακα.
Το ασαφές ερώτημα προς τα δεξιά είναι ένα ερώτημα εύρους και τα ακόλουθα πεδία δεν μπορούν να ευρετηριαστούν