MongoDB Ευρετηρίαση: createIndex() & dropIndex()

⚡ Έξυπνη Σύνοψη

MongoDB Τα ευρετήρια αποθηκεύουν ένα ταξινομημένο υποσύνολο των πεδίων μιας συλλογής, έτσι ώστε τα ερωτήματα να μπορούν να εντοπίζουν έγγραφα χωρίς να σαρώνουν κάθε εγγραφή. Οι μέθοδοι createIndex, getIndexes και dropIndex δημιουργούν, παραθέτουν και καταργούν αυτές τις δομές κρίσιμες για την απόδοση.

  • 🚀 Σκοπός: Δείκτες let MongoDB παραλείψτε τις πλήρεις σαρώσεις της συλλογής για ταχύτερες αναγνώσεις.
  • δημιουργία ευρετηρίου: Δημιουργεί ευρετήρια ενός πεδίου ή σύνθετα ευρετήρια σε αύξουσα ή φθίνουσα σειρά.
  • 🔍 getIndexes: Παραθέτει κάθε ευρετήριο σε μια συλλογή, συμπεριλαμβανομένου του προεπιλεγμένου _id.
  • 🗑️ dropIndex: Αφαιρεί ένα ευρετήριο. Το dropIndexes διαγράφει όλα εκτός από το _id.
  • Ανταλλαγή: Πάρα πολλά ευρετήρια επιβραδύνουν τις εισαγωγές, τις ενημερώσεις και τις διαγραφές.
  • 🤖 Ρύθμιση Τεχνητής Νοημοσύνης: Οι βοηθοί προτείνουν και δημιουργούν αυτόματα τα σωστά ευρετήρια.

MongoDB Ευρετηρίαση createIndex dropIndex

Τι είναι MongoDB Ευρετήρια;

Τα ευρετήρια είναι πολύ σημαντικά σε κάθε βάση δεδομένων και με MongoDB δεν είναι διαφορετικό. Με τη χρήση ευρετηρίων, η εκτέλεση ερωτημάτων σε MongoDB γίνεται πιο αποτελεσματική.

Αν είχατε μια συλλογή με χιλιάδες έγγραφα χωρίς ευρετήρια και στη συνέχεια υποβάλετε ερώτημα για να βρείτε συγκεκριμένα έγγραφα, τότε σε μια τέτοια περίπτωση MongoDB θα χρειαστεί να σαρώσει ολόκληρη τη συλλογή για να βρει τα έγγραφα. Αλλά αν είχατε ευρετήρια, MongoDB θα χρησιμοποιούσε αυτά τα ευρετήρια για να περιορίσει τον αριθμό των εγγράφων που έπρεπε να αναζητηθούν στη συλλογή.

Τα ευρετήρια είναι ειδικά σύνολα δεδομένων που αποθηκεύουν ένα μερικό μέρος των δεδομένων της συλλογής. Δεδομένου ότι τα δεδομένα είναι μερικά, γίνεται ευκολότερη η ανάγνωσή τους. Αυτό το μερικό σύνολο αποθηκεύει την τιμή ενός συγκεκριμένου πεδίου ή ενός συνόλου πεδίων, ταξινομημένα με βάση την τιμή του πεδίου.

Κατανόηση του αντίκτυπου των δεικτών

Παρόλο που η εισαγωγή έδειξε ότι τα ευρετήρια είναι καλά για ερωτήματα, η ύπαρξη πάρα πολλών ευρετηρίων μπορεί να επιβραδύνει άλλες λειτουργίες, όπως οι λειτουργίες Εισαγωγής, Διαγραφής και Ενημέρωσης.

Εάν εκτελούνται συχνές λειτουργίες εισαγωγής, διαγραφής και ενημέρωσης σε έγγραφα, τότε τα ευρετήρια θα πρέπει να αλλάζουν συχνά, κάτι που θα αποτελούσε απλώς μια επιβάρυνση για τη συλλογή.

Το παρακάτω παράδειγμα δείχνει ποιες τιμές πεδίων θα μπορούσαν να αποτελέσουν ένα ευρετήριο σε μια συλλογή. Ένα ευρετήριο μπορεί είτε να βασίζεται σε ένα μόνο πεδίο στη συλλογή είτε σε πολλά πεδία στη συλλογή.

Στο παρακάτω παράδειγμα, το Employeeid “1” και το EmployeeCode Τα «AA» χρησιμοποιούνται για την ευρετηρίαση των εγγράφων στη συλλογή. Έτσι, όταν πραγματοποιείται αναζήτηση με βάση ένα ερώτημα, αυτά τα ευρετήρια θα χρησιμοποιηθούν για την γρήγορη και αποτελεσματική εύρεση των απαιτούμενων εγγράφων στη συλλογή.

Έτσι, ακόμη και αν το ερώτημα αναζήτησης βασίζεται στον ΥπάλληλοCode «AA», το έγγραφο αυτό θα επιστραφεί.

Κατανόηση του αντίκτυπου των δεικτών

Πώς να δημιουργήσετε ευρετήρια: createIndex()

Δημιουργία ευρετηρίου σε MongoDB γίνεται με τη χρήση του δημιουργία Ευρετηρίου μέθοδος.

Το ακόλουθο παράδειγμα δείχνει πώς να προσθέσετε ένα ευρετήριο σε μια συλλογή. Ας υποθέσουμε ότι έχουμε την ίδια συλλογή Εργαζομένων, η οποία έχει τα ονόματα πεδίων "Employeeid" και "EmployeeName".

Δημιουργία ευρετηρίων με το createIndex

db.Employee.createIndex({Employeeid:1})

Code Επεξήγηση:

  1. The δημιουργία Ευρετηρίου Η μέθοδος χρησιμοποιείται για τη δημιουργία ενός ευρετηρίου με βάση το "Employeeid" του εγγράφου.
  2. Η παράμετρος «1» υποδεικνύει ότι όταν δημιουργείται το ευρετήριο με τις τιμές του πεδίου «Employeeid», αυτές θα πρέπει να ταξινομούνται κατά αύξουσα σειρά. Λάβετε υπόψη ότι αυτό διαφέρει από το πεδίο _id (το οποίο προσδιορίζει μοναδικά κάθε έγγραφο) που MongoDB δημιουργεί αυτόματα. Τα έγγραφα θα ταξινομούνται πλέον σύμφωνα με το πεδίο Employeeid και όχι σύμφωνα με το πεδίο _id.

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί το ακόλουθο αποτέλεσμα:

Παραγωγή:

createIndex έξοδος

  1. Το numIndexesBefore: 1 υποδεικνύει τον αριθμό των τιμών πεδίων στα ευρετήρια πριν από την εκτέλεση της εντολής. Κάθε συλλογή έχει το πεδίο _id, το οποίο μετράει επίσης ως τιμή πεδίου, επομένως το numIndexesBefore είναι 1.
  2. Το numIndexesAfter: 2 υποδεικνύει τον αριθμό των τιμών πεδίων στα ευρετήρια μετά την εκτέλεση της εντολής.
  3. Η έξοδος "ok: 1" καθορίζει ότι η λειτουργία ήταν επιτυχής και το νέο ευρετήριο προστίθεται στη συλλογή.

Ο παραπάνω κώδικας δείχνει πώς να δημιουργήσετε ένα ευρετήριο με βάση μία τιμή πεδίου, αλλά μπορεί επίσης να δημιουργηθεί ένα ευρετήριο με βάση πολλαπλές τιμές πεδίων. Το ακόλουθο παράδειγμα δείχνει πώς μπορεί να γίνει αυτό:

Δημιουργία σύνθετου ευρετηρίου σε πολλά πεδία

db.Employee.createIndex({Employeeid:1, EmployeeName:1})

Η μέθοδος createIndex λαμβάνει πλέον υπόψη πολλαπλές τιμές πεδίων, οι οποίες θα προκαλέσουν τη δημιουργία του ευρετηρίου με βάση τα "Employeeid" και "EmployeeName". Τα Employeeid:1 και EmployeeName:1 υποδεικνύουν ότι το ευρετήριο θα πρέπει να δημιουργηθεί με βάση αυτές τις δύο τιμές πεδίων, με το :1 να υποδεικνύει αύξουσα σειρά. Αυτό είναι γνωστό ως σύνθετο ευρετήριο.

Πώς να βρείτε ευρετήρια: getIndexes()

Εύρεση ευρετηρίου σε MongoDB γίνεται με τη χρήση του getIndexes μέθοδος. Το ακόλουθο παράδειγμα δείχνει πώς μπορεί να γίνει αυτό:

Εύρεση ευρετηρίων με getIndexes

db.Employee.getIndexes()

Η μέθοδος getIndexes χρησιμοποιείται για την εύρεση όλων των ευρετηρίων σε μια συλλογή.

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί το ακόλουθο αποτέλεσμα:

Παραγωγή:

Έξοδος getIndexes

Η έξοδος επιστρέφει ένα έγγραφο που δείχνει ότι υπάρχουν δύο ευρετήρια στη συλλογή: το πεδίο _id και το πεδίο Employeeid. Το :1 υποδεικνύει ότι οι τιμές των πεδίων στο ευρετήριο δημιουργούνται σε αύξουσα σειρά.

Πώς να αποθέσετε ευρετήρια: dropIndex()

Αφαίρεση ενός ευρετηρίου σε MongoDB γίνεται με τη χρήση του dropIndex μέθοδος. Το ακόλουθο παράδειγμα δείχνει πώς μπορεί να γίνει αυτό:

Ευρετήρια απόθεσης με dropIndex

db.Employee.dropIndex({Employeeid:1})

Η μέθοδος dropIndex λαμβάνει τις απαιτούμενες τιμές πεδίων οι οποίες πρέπει να αφαιρεθούν από το ευρετήριο.

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί το ακόλουθο αποτέλεσμα:

Παραγωγή:

Έξοδος dropIndex

  1. Το nIndexesWas: 3 υποδεικνύει τον αριθμό των τιμών πεδίων στα ευρετήρια πριν από την εκτέλεση της εντολής. Κάθε συλλογή έχει το πεδίο _id, το οποίο μετράει επίσης ως τιμή πεδίου.
  2. Η έξοδος ok: 1 προσδιορίζει ότι η λειτουργία ήταν επιτυχής και το πεδίο "Employeeid" αφαιρείται από το ευρετήριο.

Για να καταργήσετε όλα τα ευρετήρια ταυτόχρονα στη συλλογή, μπορείτε να χρησιμοποιήσετε την εντολή dropIndexes. Το ακόλουθο παράδειγμα δείχνει πώς μπορεί να γίνει αυτό:

Απόρριψη όλων των ευρετηρίων με dropIndexes

db.Employee.dropIndexes()

Η μέθοδος dropIndexes θα απορρίψει όλα τα ευρετήρια εκτός από το ευρετήριο _id.

Εάν η εντολή εκτελεστεί με επιτυχία, θα εμφανιστεί το ακόλουθο αποτέλεσμα:

Παραγωγή:

έξοδος dropIndexes

  1. Το nIndexesWas: 2 υποδεικνύει τον αριθμό των τιμών πεδίων στα ευρετήρια πριν από την εκτέλεση της εντολής.
  2. Κάθε συλλογή έχει το πεδίο _id, το οποίο επίσης μετράει ως τιμή πεδίου και δεν θα αφαιρεθεί από MongoDB; αυτό υποδηλώνει αυτό το μήνυμα.
  3. Το ok: 1 έξοδος προσδιορίζει ότι η λειτουργία ήταν επιτυχής.

Συχνές Ερωτήσεις

Ένα ευρετήριο ενός πεδίου ταξινομεί ένα πεδίο και ταιριάζει σε ερωτήματα που φιλτράρουν μόνο σε αυτό το πεδίο. Ένα σύνθετο ευρετήριο καλύπτει πολλά πεδία σε μία δομή και ταιριάζει σε ερωτήματα που φιλτράρουν ή ταξινομούν αυτά τα πεδία μαζί. Τα σύνθετα ευρετήρια υποστηρίζουν έως και 32 πεδία.

Το πεδίο _id είναι MongoDBτο πρωτεύον κλειδί του, επομένως κάθε συλλογή λαμβάνει αυτόματα ένα μοναδικό ευρετήριο _id. Δεν μπορεί να παραλειφθεί. Γι' αυτό το numIndexesBefore ξεκινά από το 1 ακόμη και πριν προσθέσετε οποιοδήποτε προσαρμοσμένο ευρετήριο.

Εκτελέστε το ερώτημα με .explain(“executionStats”). Στο σχέδιο που κέρδισε, ένα στάδιο IXSCAN σημαίνει ότι χρησιμοποιήθηκε ένας δείκτης, ενώ ένα COLLSCAN σημαίνει MongoDB σαρώσαμε κάθε έγγραφο και ένα νέο ευρετήριο μπορεί να βοηθήσει.

Χρησιμοποιήστε το στάδιο συγκέντρωσης $indexStats για να δείτε πόσο συχνά γίνεται πρόσβαση σε κάθε ευρετήριο. Τα ευρετήρια με πολύ χαμηλή χρήση σπαταλούν δίσκο και αργές εγγραφές, επομένως καταργήστε τα με το dropIndex για να διατηρήσετε τη συλλογή λιτή.

Τα εργαλεία τεχνητής νοημοσύνης αναλύουν τα αρχεία καταγραφής αργών ερωτημάτων και προτείνουν ποια πεδία θα καταχωρηθούν. MongoDBΟ Performance Advisor κατατάσσει τις προτάσεις του δείκτη με βάση τον αντίκτυπο, helping Προσθέτετε ευρετήρια υψηλής αξίας και παραλείπετε τα περιττά.

Ναι. Οι βοηθοί του AI Copilot μετατρέπουν τα αιτήματα σε απλά αγγλικά σε σωστή σύνταξη createIndex, συμπεριλαμβανομένων των αύξοντων ή φθίνουσων κλειδιών και της σύνθετης σειράς πεδίων, και στη συνέχεια εξηγούν το ευρετήριο που προκύπτει.

ESR σημαίνει Ισότητα, Ταξινόμηση, Εύρος. Όταν δημιουργείτε ένα σύνθετο ευρετήριο, τοποθετήστε πρώτα τα πεδία αντιστοίχισης ισότητας, στη συνέχεια ταξινομήστε τα πεδία και στη συνέχεια φίλτρα εύρους. Αυτή η ταξινόμηση επιτρέπει MongoDB χρησιμοποιήστε τον δείκτη με τον πιο αποτελεσματικό τρόπο.

Ένα καλυπτόμενο ερώτημα απαντάται εξ ολοκλήρου από ένα ευρετήριο, χωρίς την ανάγνωση των εγγράφων. Όταν κάθε πεδίο στο φίλτρο και η προβολή βρίσκονται σε ένα ευρετήριο, MongoDB επιστρέφει αποτελέσματα πιο γρήγορα.

Συνοψίστε αυτήν την ανάρτηση με: