τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Η γλώσσα SQL χωρίζεται σε τέσσερις κατηγορίες: γλώσσα ερωτημάτων δεδομένων DQL, γλώσσα χειρισμού δεδομένων DML, γλώσσα ορισμού δεδομένων DDL και γλώσσα ελέγχου δεδομένων DCL.
1. Data Query Language DQL
Η βασική δομή της γλώσσας ερωτημάτων δεδομένων DQL είναι ένα μπλοκ ερωτήματος που αποτελείται από ρήτρα SELECT, όρος FROM και όρος WHERE: SELECT <πίνακας ονόματος πεδίου> FROM <όνομα πίνακα ή προβολής> WHERE <συνθήκες ερωτήματος>
2. Γλώσσα χειρισμού δεδομένων DML
Υπάρχουν τρεις κύριες μορφές DML γλώσσας χειρισμού δεδομένων:
1) Εισαγωγή: INSERT
2) Ενημέρωση: ΕΝΗΜΕΡΩΣΗ
3) Διαγραφή: ΔΙΑΓΡΑΦΗ
3. Γλώσσα ορισμού δεδομένων DDL
Η γλώσσα ορισμού δεδομένων DDL χρησιμοποιείται για τη δημιουργία διαφόρων αντικειμένων στη βάση δεδομένων ----- πίνακες, προβολές, ευρετήρια, συνώνυμα, συμπλέγματα, κ.λπ., όπως: ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ / ΠΡΟΒΟΛΗ / ΕΥΡΕΤΗΡΙΟ / SYN / ΣΥΣΤΗΜΑ συνωνύμων ευρετηρίου προβολής πίνακα . Οι λειτουργίες DDL υποβάλλονται σιωπηρά! Δεν είναι δυνατή η επαναφορά
4. Γλώσσα ελέγχου δεδομένων DCL
Η γλώσσα ελέγχου δεδομένων DCL χρησιμοποιείται για τη χορήγηση ή την ανάκληση ορισμένων δικαιωμάτων πρόσβασης στη βάση δεδομένων, τον έλεγχο του χρόνου και των αποτελεσμάτων των συναλλαγών χειρισμού της βάσης δεδομένων και την παρακολούθηση της βάσης δεδομένων. αρέσει:
1) ΧΟΡΗΓΗΣΗ: Εξουσιοδότηση.
2) ΕΠΙΤΡΟΠΗ [ΕΡΓΑΣΙΑ] ΣΤΟ [ΣΗΜΕΙΟ ΑΠΟΘΗΚΕΥΣΗΣ]: Επαναφορά σε ένα συγκεκριμένο σημείο. Επαναφορά --- ROLLBACK Η εντολή επαναφοράς επιστρέφει την κατάσταση της βάσης δεδομένων στην τελευταία κατάσταση που υποβλήθηκε. Η μορφή του είναι: SQL>ROLLBACK;
3) ΔΕΣΜΕΥΣΗ [ΕΡΓΑΣΙΑ]: Υποβολή. Κατά τις λειτουργίες εισαγωγής, διαγραφής και τροποποίησης της βάσης δεδομένων, η συναλλαγή ολοκληρώνεται μόνο όταν υποβληθεί στη βάση δεδομένων. Πριν από τη δέσμευση της συναλλαγής, μόνο το άτομο που χειρίζεται τη βάση δεδομένων έχει το δικαίωμα να δει τι έχει γίνει.
Εντολή εξουσιοδότησης βάσης δεδομένων:
ΧΟΡΗΓΗΣΤΕ <άδεια> στο όνομα του πίνακα (ή στο όνομα της στήλης) στον χρήστη
Επιλογή σωστής απάντησης Β: εισαγωγή, επιλογή: όνομα πίνακα αδειών: χρήστης χρήστη: nkw
Συμπληρωματικά σημεία γνώσης-άδειες ανακύκλωσης
ΑΝΑΚΛΗΣΗ <άδειας> στο όνομα του πίνακα (ή στο όνομα της στήλης) ΑΠΟ χρήστη
Πιστεύω ότι όλοι είναι εξοικειωμένοι με τη δήλωση εξηγήσεων, η οποία χρησιμοποιείται ως δήλωση για την προβολή του σχεδίου εκτέλεσης. Το εξηγεί χρησιμοποιείται συχνά στην ανάλυση βελτιστοποίησης SQL.
Αξίζει να σημειωθεί εδώ: η εξήγηση δεν εκτελεί πραγματικά τη δήλωση, αλλά εμφανίζει μόνο το σχέδιο εκτέλεσης.
Τι πληροφορίες μπορώ να δω;
- EXPLAIN SELECT select具体语句
- 如:
- EXPLAIN SELECT * FROM userpro
Λίστα | περιγράφω | Αναπληρώ |
ταυτότητα | Κάθε λέξη-κλειδί SELECT αντιστοιχεί σε ένα αναγνωριστικό | |
select_type | Τύπος ερωτήματος που αντιστοιχεί στη λέξη-κλειδί SELECT | |
τραπέζι | Όνομα πίνακα | |
χωρίσματα | Αντιστοίχιση πληροφοριών διαμερίσματος | |
τύπος | Μέθοδος πρόσβασης για μεμονωμένο τραπέζι | |
πιθανά_κλειδιά | Πιθανά ευρετήρια | |
κλειδί | πραγματικός δείκτης που χρησιμοποιείται | |
key_len | Το πραγματικό μήκος του δείκτη που χρησιμοποιείται | |
αναφ | Όταν χρησιμοποιείτε το ερώτημα ισοδυναμίας στήλης ευρετηρίου, οι πληροφορίες αντικειμένου που αντιστοιχούν στη στήλη ευρετηρίου για ισοδυναμία. | |
σειρές | Εκτιμώμενος αριθμός εγγραφών προς ανάγνωση | |
φιλτραρισμένο | Ποσοστό υπολειπόμενων εγγραφών μετά το φιλτράρισμα με κριτήρια αναζήτησης |
|
Επιπλέον | επιπλέον πληροφορία |
1, id
Κάθε λέξη-κλειδί SELECT αντιστοιχεί σε ένα αναγνωριστικό
Όσο μεγαλύτερη είναι η τιμή id, τόσο μεγαλύτερη είναι η προτεραιότητα και θα εκτελεστεί πρώτη.
Εάν τα αναγνωριστικά είναι τα ίδια, μπορούν να θεωρηθούν ως ομάδα και να εκτελεστούν διαδοχικά από πάνω προς τα κάτω.
Κάθε αριθμός ID αντιπροσωπεύει ένα ανεξάρτητο ερώτημα Όσο λιγότερος είναι ο αριθμός των ερωτημάτων σε μια πρόταση SQL, τόσο το καλύτερο.
2, Select_type
κατηγορία | εικονογραφώ |
ΑΠΛΟΣ | Ερώτημα μεμονωμένου πίνακα, χωρίς υποερώτημα ή ερώτημα UNION. |
ΠΡΩΤΑΡΧΙΚΟΣ | Η πιο εξωτερική πρόταση SELECT στο ερώτημα. |
ΥΠΟΕΡΩΤΗΣΗ | Ένα δευτερεύον ερώτημα χρησιμοποιείται στον όρο WHERE. |
ΣΥΜΠΛΗΡΩΜΑΤΙΚΟΣ | Για υποερωτήματα που περιέχονται στον όρο FROM, η MySQL θα το επισημάνει ως DERIVED (προερχόμενο) και θα δημιουργήσει έναν προσωρινό πίνακα για τα αποτελέσματά του που θα χρησιμοποιηθούν από το εξωτερικό ερώτημα. |
ΕΝΩΣΗ | Η δεύτερη και οι επόμενες δηλώσεις ερωτήματος σε ένα ερώτημα UNION. |
ΑΠΟΤΕΛΕΣΜΑ ΕΝΩΣΗΣ | Το σύνολο αποτελεσμάτων ενός ερωτήματος UNION. |
ΕΞΑΡΤΗΜΑ ΥΠΟΕΡΩΤΗΣΗ | Το αποτέλεσμα του δευτερεύοντος ερωτήματος εξαρτάται από την τιμή του εξωτερικού ερωτήματος και το υποερώτημα εκτελείται μία φορά για κάθε σειρά στο εξωτερικό ερώτημα. |
ΕΞΑΡΤΗΜΕΝΟ ΣΥΝΔΕΣΜΟ | Η δεύτερη και οι επόμενες δηλώσεις ερωτήματος ενός ερωτήματος UNION και τα αποτελέσματα εξαρτώνται από την τιμή του εξωτερικού ερωτήματος |
ΑΠΑΡΑΞΕΙΣΤΟ ΥΠΟΕΡΩΤΗΣΗ | Το υποερώτημα δεν μπορεί να αποθηκευτεί προσωρινά και θα εκτελείται κάθε φορά που γίνεται αναφορά. |
3. Η στήλη του πίνακα αντιπροσωπεύει το όνομα του πίνακα του πίνακα (μερικές φορές όχι το πραγματικό όνομα του πίνακα, μπορεί να είναι η συντομογραφία).
4. χωρίσματα (προαιρετικά)
5. πληκτρολογήστε ☆
Οι συνήθεις τύποι είναι οι εξής
τύπος | εικονογραφώ |
Σύστημα | Υπάρχει μόνο μία σειρά στον πίνακα, συνήθως SELECT ... FROM DUAL Βελτιστοποίηση ερωτημάτων. |
συνθ | Το ερώτημα βρίσκεται μέσω του ευρετηρίου μία φορά, με μία μόνο σειρά αποτελεσμάτων (σταθερός πίνακας). |
eq_ref | Χρησιμοποιήστε ένα μοναδικό ευρετήριο ή πρωτεύον κλειδί για να βρείτε μια σειρά από έναν άλλο πίνακα. |
αναφ | Χρησιμοποιήστε ένα μη μοναδικό ευρετήριο για να βρείτε μία ή περισσότερες σειρές από έναν άλλο πίνακα. |
εύρος | Επιστρέψτε ένα εύρος σειρών χρησιμοποιώντας ένα ευρετήριο. |
δείκτης | Σαρώνει πλήρως το ευρετήριο για να βρει σειρές αντί να σαρώσει ολόκληρο τον πίνακα. |
όλα | Μια πλήρης σάρωση πίνακα ελέγχει κάθε σειρά του πίνακα. |
Γενικά, προσπαθήστε να τα αποφύγετε όλα
6, κλειδί και πιθανά_κλειδιά
κλειδί:
key
Το πεδίο δείχνει το πραγματικό ευρετήριο που χρησιμοποιείται από το ερώτημα.Αν η τιμή αυτού του πεδίου είναιNULL
, υποδεικνύοντας ότι δεν χρησιμοποιείται ευρετήριο. Εάν αυτό το πεδίο έχει τιμή, σημαίνει ότι η MySQL χρησιμοποίησε το καθορισμένο ευρετήριο για να εκτελέσει το ερώτημα.πιθανά_κλειδιά:
possible_keys
Το πεδίο εμφανίζει τη λίστα των ευρετηρίων που μπορεί να χρησιμοποιήσει η MySQL. Αυτά τα ευρετήρια είναι ευρετήρια που μπορούν να ληφθούν υπόψη σε ερωτήματα, αλλά μπορεί να μην χρησιμοποιηθούν στην πραγματικότητα. συνήθως,possible_keys
Τα ευρετήρια που παρατίθενται στο καθορίζονται με βάση τις συνθήκες του ερωτήματος και τη δομή του πίνακα.αν key
Ένα πεδίο έχει ένα όνομα ευρετηρίου καιpossible_keys
Τα ονόματα πολλών ευρετηρίων παρατίθενται στο , υποδεικνύοντας ότι η MySQL έχει επιλέξειkey
Το ευρετήριο στο οποίο παρατίθεται το πεδίο χρησιμοποιείται για την εκτέλεση του ερωτήματος, ενώ τα άλλα ευρετήρια παρατίθενται στοpossible_keys
Η Medium είπε ότι θα μπορούσε επίσης να εξεταστεί, αλλά τελικά δεν χρησιμοποιήθηκε.
αν key
Τα χωράφια είναιNULL
,και possible_keys
Τα ονόματα πολλών ευρετηρίων παρατίθενται στο , υποδεικνύοντας ότι η MySQL δεν χρησιμοποιεί κανένα ευρετήριο κατά την εκτέλεση του ερωτήματος, κάτι που μπορεί να οδηγήσει σε πλήρη σάρωση πίνακα ή άλλες μεθόδους πρόσβασης που δεν είναι βελτιστοποιημένες με ευρετήριο.
7, κλειδί_λεν
key_len
Είναι ένα πεδίο που περιγράφει το μήκος του κλειδιού ευρετηρίου. Υποδεικνύει τη χρήση ευρετηρίου και το μήκος του κλειδιού ευρετηρίου όταν η MySQL χρησιμοποιεί ένα συγκεκριμένο ευρετήριο για την εκτέλεση ερωτημάτων.
Ευρετήριο μονής στήλης:
INT
),αλλά key_len
Η τιμή είναι το μήκος της στήλης.VARCHAR
),αλλά key_len
Η τιμή του είναι το μέγιστο μήκος του πεδίου.σύνθετος δείκτης:
key_len
Αντιπροσωπεύει το συνολικό μήκος όλων των στηλών του ευρετηρίου.συνδυασμένος δείκτης:
key_len
είναι το συνολικό μήκος όλων των στηλών στο συνδυασμένο ευρετήριο.πρόθεμα ευρετηρίου:
key_len
Θα εμφανιστεί το πραγματικό μήκος του τμήματος ευρετηρίου που χρησιμοποιείται.8, αναφ
ref
Είναι ένα πεδίο που περιγράφει τις συνθήκες σύνδεσης μεταξύ πινάκων ή χρησιμοποιεί ένα μη μοναδικό ευρετήριο για αναζήτηση. Υποδεικνύει ποιες συνθήκες σύνδεσης ή ποια ευρετήρια χρησιμοποιεί η MySQL για πρόσβαση στον πίνακα κατά την εκτέλεση ενός ερωτήματος.
9, σειρές
rows
Είναι μια εκτίμηση του αριθμού των σειρών στις οποίες προσπελάστηκε ή εξετάστηκε κατά την εκτέλεση ενός ερωτήματος.
SELECT
Ρωτώ,rows
Αντιπροσωπεύει τον εκτιμώμενο αριθμό σειρών προς επιστροφή.JOIN
) ή υποερώτημα,rows
Μπορεί να αντιπροσωπεύει τον αριθμό των σειρών στις οποίες προσπελάστηκε κατά τη λειτουργία σύνδεσης.rows
Μπορεί να αντιπροσωπεύει τον αριθμό των σειρών που σαρώθηκαν.10, φιλτραρισμένο
Αντιπροσωπεύει το ποσοστό των σειρών που φιλτράρονται με βάση τις συνθήκες WHERE και τις συνθήκες ευρετηρίου. φιλτραρισμένο αντικατοπτρίζει το αποτέλεσμα βελτιστοποίησης ερωτήματος που εκτιμάται από το εργαλείο βελτιστοποίησης.
πότε filtered
Όταν είναι κοντά στο 100%, σημαίνει ότι οι συνθήκες του ερωτήματος έχουν ουσιαστικά φιλτράρει τις περισσότερες σειρές που δεν πληρούν τις προϋποθέσεις, κάτι που είναι συνήθως ένας καλός δείκτης βελτιστοποίησης.
Αντίθετα, αν filtered
Μια χαμηλή τιμή μπορεί να υποδεικνύει ότι οι συνθήκες του ερωτήματος δεν είναι αρκετά ακριβείς ή ότι το εργαλείο βελτιστοποίησης δεν χρησιμοποιεί αποτελεσματικά το ευρετήριο για να φιλτράρει τα δεδομένα.
11, Επιπλέον
Πεδία πρόσθετων πληροφοριών
Εδώ είναι μερικά κοινά Extra
Τα πεδία και οι σημασίες τους:
Χρήση ευρετηρίου:
Χρησιμοποιώντας όπου:
Χρήση προσωρινών:
Χρήση ταξινόμησης αρχείων:
Το εύρος ελέγχθηκε για κάθε εγγραφή (χάρτης ευρετηρίου: ...):
range
Σε τύπο ερωτήματος.Πλήρης σάρωση με κλειδί NULL:
Διακριτή:
Χρήση buffer σύνδεσης (Block Nested Loop):
Αδύνατον ΠΟΥ:
Δεν χρησιμοποιούνται τραπέζια:
SELECT NOW()
。- CREATE TABLE s1 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
- CREATE TABLE s2 (
- id INT AUTO_INCREMENT,
- key1 VARCHAR(100),
- key2 INT,
- key3 VARCHAR(100),
- key_part1 VARCHAR(100),
- key_part2 VARCHAR(100),
- key_part3 VARCHAR(100),
- common_field VARCHAR(100),
- PRIMARY KEY (id),
- INDEX idx_key1 (key1),
- UNIQUE INDEX idx_key2 (key2),
- INDEX idx_key3 (key3),
- INDEX idx_key_part(key_part1, key_part2, key_part3)
- ) ENGINE=INNODB CHARSET=utf8;
Τα δεδομένα προετοιμάζονται μόνοι σας.
Ερώτημα μεμονωμένου πίνακα
EXPLAIN SELECT * FROM `s1`;
Συμμετοχή στο ερώτημα
EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;
υποερώτημα
- EXPLAIN SELECT * FROM s1 WHERE key1 IN (SELECT key2 FROM s2 WHERE common_field
- = 'a');
- #Union 去重
- EXPLAIN SELECT * FROM `s1` UNION SELECT * FROM `s2`;
- #Union 全查
- EXPLAIN SELECT * FROM `s1` UNION ALL SELECT * FROM `s2`;
Το τελευταίο βήμα είναι η κατάργηση διπλότυπων, επομένως θα χρησιμοποιηθεί ένας προσωρινός πίνακας. Ωστόσο, το UNION ALL είναι ένα ερώτημα για όλους και δεν θα εμφανιστεί προσωρινό μήνυμα ερωτήματος πίνακα.
const (βρείτε το ευρετήριο μία φορά, μόνο μία σειρά αποτελεσμάτων)
EXPLAIN SELECT * FROM s1 WHERE id = 10002;
eq_ref (βρείτε μια σειρά από έναν άλλο πίνακα χρησιμοποιώντας ένα μοναδικό ευρετήριο ή πρωτεύον κλειδί)
EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;
ref (χρησιμοποιήστε ένα μη μοναδικό ευρετήριο για να βρείτε μία ή περισσότερες σειρές από έναν άλλο πίνακα)
EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';
εύρος (επιστρέφει ένα εύρος σειρών χρησιμοποιώντας ευρετήριο)
EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');
ευρετήριο (σαρώστε πλήρως το ευρετήριο για να βρείτε σειρές)
EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';
φιλτραρισμένος δεκαδικός χρόνος
EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'