Dix ans de briques mobiles JAVA - connaissance de base de l'optimisation MYSQL

1. Possibilité d'échec de l'index MYSQL

1. La colonne d'index n'est pas utilisée par la requête : Si la requête n'utilise pas la colonne d'index, MySQL ne pourra pas utiliser l'index pour une recherche rapide, ce qui entraînera l'échec de l'index.

2. Des fonctions sont utilisées sur la colonne d'index : Si des fonctions (telles que LOWER, UPPER, etc.) sont utilisées sur la colonne d'index, MySQL ne peut pas utiliser l'index pour une recherche rapide, ce qui rend l'index invalide.

**3. Le type de données de la colonne d'index ne correspond pas : **Si le type de données dans la condition de requête ne correspond pas au type de données de la colonne d'index, MySQL peut ne pas être en mesure d'utiliser l'index pour effectuer une recherche, indice d'échec.

**4. La quantité de données est trop petite : **Pour les index non uniques, si la quantité de données est trop petite, MySQL peut choisir d'analyser la table entière au lieu d'utiliser l'index, provoquant l'échec de l'index.

(1) 表的大小:如果表中的数据量非常小,比如只有几行或几十行,MySQL可能会选择全表扫描而不是使用索引。这是因为对于非常小的表来说,使用索引进行查找可能会导致额外的开销,而全表扫描可能更快。 
 
(2) 索引的选择性:索引的选择性是指索引中不同值的数量与表中总行数的比率。如果索引的选择性非常低,即索引列上的值重复较多,MySQL可能会认为使用索引进行查找并不高效,而选择全表扫描。 
 
(3) 查询优化器的判断:MySQL的查询优化器会根据统计信息和查询复杂度等因素来决定是使用索引还是全表扫描。如果查询优化器认为全表扫描更高效,即使数据量较小,也可能选择全表扫描。 

5. Il y a des valeurs NULL dans la colonne d'index : Pour les index ordinaires, s'il y a un grand nombre de valeurs NULL dans la colonne d'index, MySQL peut renoncer à utiliser l'index et choisir un parcours complet de la table.

**6. L'ordre des colonnes de l'index ne correspond pas : **Pour un index joint, si l'ordre des colonnes de la condition de requête ne correspond pas à l'ordre des colonnes de la définition de l'index, MySQL peut ne pas être en mesure d'utiliser l'index pour effectuer une recherche. , entraînant un échec de l'index.

Utilisez expliquer pour afficher l'utilisation de l'index de SQL

Signification de la colonne Type
**1. system:** Il s'agit du type de requête de niveau le plus élevé, indiquant qu'il n'y a qu'une seule ligne de données (telle qu'une table système).

**2. const :** Il s'agit du meilleur type de requête, ce qui signifie que MySQL peut utiliser des constantes pour faire correspondre une seule ligne au cours du processus de requête. Par exemple, MySQL peut utiliser le type de requête const lors de l'utilisation d'une clé primaire ou d'un index unique pour des requêtes équivalentes.

**3. eq_ref :** Il s'agit d'un très bon type de requête, indiquant que MySQL utilise un join index pour faire correspondre une seule ligne au cours du processus de requête. Par exemple, MySQL peut utiliser le type de requête eq_ref lors de l'utilisation d'une clé primaire ou d'un index unique pour des requêtes équivalentes dans une requête de jointure.

**4. ref :** Il s'agit d'un meilleur type de requête, indiquant que MySQL utilise un index non unique pour trouver les lignes correspondantes pendant le processus de requête. Par exemple, MySQL peut utiliser le type de requête ref lorsqu'un index non unique est utilisé dans la requête pour une requête équivalente ou une requête IN.

**5. plage :** Il s'agit d'un meilleur type de requête, indiquant que MySQL utilise la plage d'index pour trouver les lignes correspondantes pendant le processus de requête. Par exemple, MySQL peut utiliser le type de requête de plage lorsqu'un index non unique est utilisé dans la requête pour une requête de plage.

**6. index :** Il s'agit d'un type de requête général, indiquant que MySQL utilise un index pour trouver les lignes correspondantes pendant le processus de requête. Par exemple, MySQL peut utiliser le type de requête index lorsqu'un index non unique est utilisé dans la requête pour une requête LIKE.

**7. all :** Il s'agit du pire type de requête, ce qui signifie que MySQL doit analyser l'intégralité de la table pour trouver les lignes correspondantes pendant le processus de requête. Par exemple, MySQL peut utiliser le type de requête all lorsqu'aucun index n'est utilisé ou qu'un index inapproprié est utilisé dans la requête.

Valeur de colonne supplémentaire et signification

1. Utilisation de l'index : indique que la requête utilise l'index pour récupérer des données, généralement un bon signe. Cela signifie que les requêtes peuvent accéder rapidement aux lignes requises via la structure d'index.

2. Utilisation de where : indique que la requête utilise la clause WHERE pour filtrer les conditions. Bien que cela soit nécessaire pour le filtrage des résultats, cet indicateur à lui seul ne dit pas grand-chose sur les performances.

3. Utilisation temporaire : indique que MySQL doit créer une table temporaire pour traiter les requêtes. Cela peut se produire lorsque des clauses complexes GROUP BY, DISTINCT ou ORDER BY sont présentes. Bien que cela puisse affecter les performances, ce n'est généralement pas un problème important.

4. Utilisation de filesort : indique que la requête doit effectuer des opérations de tri supplémentaires pour satisfaire la clause ORDER BY. Cela peut se produire lorsque la clause ORDER BY d'une requête ne peut pas être satisfaite par un index. Le tri de fichiers peut être gourmand en ressources, en particulier pour les grands ensembles de résultats, ce qui affecte les performances.

5. Utilisation du tampon de jointure : indique que MySQL utilise le tampon de connexion pour effectuer des opérations de jointure entre les tables. Généralement efficace, mais si la taille du tampon de connexion est trop petite, cela peut entraîner des opérations sur disque, affectant les performances.

6. Utilisation de la condition d'index : indique que MySQL utilise le refoulement d'index, qui utilise l'index pour évaluer une partie de la clause WHERE. Il peut améliorer les performances en réduisant le nombre de lignes à examiner.

7. Impossible where : Indique que la clause WHERE de la requête contient des conditions contradictoires, rendant impossible la satisfaction de la requête. Cela peut entraîner un jeu de résultats vide.

classement de l'indice

1. Index clusterisé :

  • Un index clusterisé détermine l'ordre physique des lignes dans une table.
  • Un seul index clusterisé peut être créé par table.
  • Le moteur de stockage InnoDB de MySQL utilise par défaut des index clusterisés sur les clés primaires.
  • Lorsqu'une table a un index clusterisé, les lignes de données réelles sont stockées dans les nœuds feuilles de l'index lui-même.
  • Les nœuds feuilles d'un index clusterisé contiennent la ligne entière de données, de sorte que la ligne entière peut être récupérée efficacement par clé primaire.
  • L'ordre de l'index clusterisé affecte l'ordre physique des données sur le disque.

2. Index non clusterisé :

  • Les index non clusterisés sont des structures distinctes des données réelles.
  • Plusieurs index non clusterisés peuvent être créés par table.
  • Un index non clusterisé contient une copie des colonnes indexées ainsi que des pointeurs vers les données réelles.
  • Les nœuds feuilles d'un index non clusterisé contiennent uniquement les colonnes indexées et les pointeurs vers les lignes de données correspondantes.
  • Les index non clusterisés sont utiles pour une recherche et un tri efficaces sur des colonnes spécifiques, mais peuvent nécessiter des recherches supplémentaires pour récupérer des lignes entières de données.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43485737/article/details/132280449
conseillé
Classement