2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Le langage SQL est divisé en quatre catégories : le langage de requête de données DQL, le langage de manipulation de données DML, le langage de définition de données DDL et le langage de contrôle de données DCL.
1. Langage de requête de données DQL
La structure de base du langage de requête de données DQL est un bloc de requête composé de la clause SELECT, de la clause FROM et de la clause WHERE : SELECT <table de nom de champ> FROM <nom de table ou de vue> WHERE <conditions de requête>
2. Langage de manipulation de données DML
Il existe trois formes principales de langage de manipulation de données DML :
1) Insérer : INSÉRER
2) Mise à jour : MISE À JOUR
3) Supprimer : SUPPRIMER
3. Langage de définition de données DDL
Le langage de définition de données DDL est utilisé pour créer divers objets dans la base de données ----- tables, vues, index, synonymes, clusters, etc., tels que : CREATE TABLE / VIEW / INDEX / SYN / CLUSTER | . Les opérations DDL sont soumises implicitement ! Impossible de revenir en arrière
4. DCL du langage de contrôle des données
Le langage de contrôle des données DCL est utilisé pour accorder ou révoquer certains privilèges pour accéder à la base de données, contrôler l'heure et l'effet des transactions de manipulation de base de données et surveiller la base de données. comme:
1) SUBVENTION : Autorisation.
2) ROLLBACK [WORK] TO [SAVEPOINT] : revenez à un certain point. Rollback---ROLLBACK La commande rollback ramène l'état de la base de données au dernier état soumis. Son format est : SQL>ROLLBACK ;
3) COMMIT [TRAVAIL] : Soumettre. Lors des opérations d'insertion, de suppression et de modification de la base de données, la transaction n'est terminée que lorsqu'elle est soumise à la base de données. Avant que la transaction ne soit validée, seule la personne qui exploite la base de données a le droit de voir ce qui a été fait. Les autres ne peuvent le voir qu'une fois la validation finale terminée.
Commande d'autorisation de base de données :
GRANT<permission> sur le nom de la table (ou le nom de la colonne) à l'utilisateur
Option de réponse correcte B : insérer, sélectionner : nom de la table d'autorisation : utilisateur utilisateur : nkw
Points de connaissances supplémentaires – autorisations de recyclage
REVOKE <permission> sur le nom de la table (ou le nom de la colonne) DE l'utilisateur
Je pense que tout le monde connaît l'instruction d'explication, qui est utilisée comme instruction pour visualiser le plan d'exécution. Expliquer est souvent utilisé dans l'analyse d'optimisation SQL.
Il convient de noter ici : expliquer n'exécute pas réellement l'instruction, mais affiche uniquement le plan d'exécution.
Quelles informations puis-je voir ?
- EXPLAIN SELECT select具体语句
- 如:
- EXPLAIN SELECT * FROM userpro
Liste | décrire | Remplir |
identifiant | Chaque mot clé SELECT correspond à un identifiant | |
sélectionner le genre | Type de requête correspondant au mot clé SELECT | |
tableau | Nom de la table | |
partitions | Informations de partition correspondantes | |
taper | Méthode d'accès pour une seule table | |
clés_possibles | Index possibles | |
clé | indice réel utilisé | |
clé_len | La longueur d'index réelle utilisée | |
réf | Lors de l'utilisation de la requête d'équivalence de colonne d'index, les informations sur l'objet qui correspondent à la colonne d'index pour l'équivalence. | |
Lignes | Nombre estimé d'enregistrements à lire | |
filtré | Pourcentage d'enregistrements restants après filtrage par critères de recherche |
|
Supplémentaire | informations supplémentaires |
1, identifiant
Chaque mot clé SELECT correspond à un identifiant
Plus la valeur de l'identifiant est grande, plus la priorité est élevée et sera exécutée en premier.
Si les identifiants sont identiques, ils peuvent être considérés comme un groupe et exécutés séquentiellement de haut en bas.
Chaque numéro d'identification représente une requête indépendante. Moins il y a de requêtes dans une instruction SQL, mieux c'est.
2, sélectionnez_type
catégorie | illustrer |
SIMPLE | Requête de table unique, pas de sous-requête ni de requête UNION. |
PRIMAIRE | Instruction SELECT la plus externe de la requête. |
SOUS-REQUETE | Une sous-requête est utilisée dans la clause WHERE. |
DÉRIVÉ | Pour les sous-requêtes contenues dans la clause FROM, MySQL la marquera comme DERIVED (dérivée) et générera une table temporaire pour son jeu de résultats à utiliser par la requête externe. |
SYNDICAT | La deuxième instruction de requête et les suivantes dans une requête UNION. |
RÉSULTAT SYNDICAL | L’ensemble de résultats d’une requête UNION. |
SOUS-REQUETE DEPENDANTE | Le résultat de la sous-requête dépend de la valeur de la requête externe et la sous-requête est exécutée une fois pour chaque ligne de la requête externe. |
UNION DÉPENDANTE | La deuxième instruction de requête et les suivantes d'une requête UNION, ainsi que les résultats dépendent de la valeur de la requête externe. |
SOUS-REQUETE NON MISE EN CACHET | La sous-requête ne peut pas être mise en cache et sera exécutée à chaque fois qu'elle sera référencée. |
3. La colonne du tableau représente le nom de la table (parfois pas le vrai nom de la table, il peut s'agir d'une abréviation).
4. partitions (facultatif)
5. tapez ☆
Les types courants sont les suivants
taper | illustrer |
système | Il n'y a qu'une seule ligne dans le tableau, généralement SELECT ... FROM DUAL Optimisation des requêtes. |
constante | La requête est trouvée une seule fois dans l'index, avec une seule ligne de résultats (table constante). |
eq_ref | Utilisez un index unique ou une clé primaire pour rechercher une ligne d'une autre table. |
réf | Utilisez un index non unique pour rechercher une ou plusieurs lignes d'une autre table. |
gamme | Renvoie une plage de lignes à l'aide d'un index. |
indice | Analyse complètement l'index pour trouver des lignes plutôt que d'analyser la table entière. |
tous | Une analyse complète du tableau vérifie chaque ligne du tableau. |
En général, essayez d'éviter tout
6, clé et clés_possibles
clé:
key
Le champ affiche l'index réel utilisé par la requête.Si la valeur de ce champ estNULL
, indiquant qu'aucun index n'est utilisé. Si ce champ a une valeur, cela signifie que MySQL a utilisé l'index spécifié pour exécuter la requête.clés_possibles:
possible_keys
Field affiche la liste des index que MySQL peut utiliser. Ces index sont des index qui peuvent être pris en compte dans les requêtes, mais qui ne peuvent pas être réellement utilisés. généralement,possible_keys
Les index répertoriés dans sont déterminés en fonction des conditions de requête et de la structure de la table.si key
Un champ a un nom d'index, etpossible_keys
Plusieurs noms d'index sont répertoriés dans , indiquant que MySQL a sélectionnékey
L'index sur lequel le champ est répertorié est utilisé pour effectuer la requête, tandis que les autres index sont répertoriés surpossible_keys
Medium a déclaré que cela pourrait également être envisagé, mais finalement non utilisé.
si key
Les champs sontNULL
,et possible_keys
Plusieurs noms d'index sont répertoriés dans , indiquant que MySQL n'utilise aucun index lors de l'exécution de la requête, ce qui peut entraîner une analyse complète de la table ou d'autres méthodes d'accès non optimisées pour l'index.
7, clé_len
key_len
Est un champ décrivant la longueur de la clé d'index. Il indique l'utilisation de l'index et la longueur de la clé d'index lorsque MySQL utilise un index spécifique pour exécuter des requêtes.
Index à une seule colonne:
INT
),mais key_len
La valeur est la longueur de la colonne.VARCHAR
),mais key_len
La valeur de est la longueur maximale du champ.index composé:
key_len
Représente la longueur totale de toutes les colonnes de l'index.indice combiné:
key_len
est la longueur totale de toutes les colonnes de l'index combiné.préfixe d'index:
key_len
La longueur réelle de la partie index utilisée sera affichée.8, réf.
ref
Il s'agit d'un champ qui décrit les conditions de connexion entre les tables ou utilise un index non unique pour effectuer la recherche. Il indique les conditions de jointure ou les index que MySQL utilise pour accéder à la table lors de l'exécution d'une requête.
9 rangées
rows
Est une estimation du nombre de lignes consultées ou examinées lors de l'exécution d'une requête.
SELECT
Renseigner,rows
Représente le nombre estimé de lignes à renvoyer.JOIN
) ou sous-requête,rows
Peut représenter le nombre de lignes consultées lors de l'opération de jointure.rows
Peut représenter le nombre de lignes analysées.10, filtré
Représente le pourcentage de lignes filtrées en fonction des conditions WHERE et des conditions d'index. filtré reflète l'effet d'optimisation des requêtes estimé par l'optimiseur.
quand filtered
Lorsqu'il est proche de 100%, cela signifie que les conditions de requête ont filtré efficacement la plupart des lignes ne remplissant pas les conditions, ce qui est généralement un bon indicateur d'optimisation.
Au contraire, si filtered
Une valeur faible peut indiquer que les conditions de requête ne sont pas assez précises ou que l'optimiseur n'utilise pas efficacement l'index pour filtrer les données.
11. Supplémentaire
Champs d'informations supplémentaires
En voici quelques-uns courants Extra
Champs et leurs significations :
Utilisation de l'index:
Utilisation où:
Utilisation temporaire:
Utilisation de filesort:
Plage vérifiée pour chaque enregistrement (carte d'index : ...):
range
Dans le type de requête.Analyse complète sur clé NULL:
Distinct:
Utilisation du tampon de jointure (boucle imbriquée en bloc):
Impossible OÙ:
Aucune table utilisée:
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;
Les données sont préparées par vous-même.
Requête de table unique
EXPLAIN SELECT * FROM `s1`;
Requête de jointure
EXPLAIN SELECT * FROM `s1` INNER JOIN `s2`;
sous-requête
- 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`;
La dernière étape est la déduplication, une table temporaire sera donc utilisée. Cependant, UNION ALL est une requête pour tous et aucun message de requête de table temporaire n'apparaîtra.
const (trouver l'index une fois, une seule ligne de résultats)
EXPLAIN SELECT * FROM s1 WHERE id = 10002;
eq_ref (trouver une ligne d'une autre table à l'aide d'un index unique ou d'une clé primaire)
EXPLAIN SELECT * FROM s1 INNER JOIN s2 ON s1.id = s2.id;
ref (utilisez un index non unique pour trouver une ou plusieurs lignes d'une autre table)
EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';
range (renvoie une plage de lignes en utilisant l'index)
EXPLAIN SELECT * FROM s1 WHERE key1 IN ('a', 'b', 'c');
index (analyser complètement l'index pour trouver des lignes)
EXPLAIN SELECT key_part2 FROM s1 WHERE key_part3 = 'a';
temps décimal filtré
EXPLAIN SELECT * FROM s1 WHERE key1 > 'za' AND common_field = 'la'