Mysql
 sql >> Base de données >  >> RDS >> Mysql

Balayage coûteux de la table complète sur tout sélectionner sans condition

Reportez-vous au lien ci-dessous pour plus de détails

https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html

la cause de l'analyse complète de la table est ci-dessous

  • La table est si petite qu'il est plus rapide d'effectuer une analyse de table que de s'embêter avec une recherche de clé. Ceci est courant pour les tableaux comportant moins de 10 lignes et une courte longueur de ligne.

  • Il n'y a pas de restrictions utilisables dans la clause ON ou WHERE pour les colonnes indexées.

  • Vous comparez des colonnes indexées avec des valeurs constantes et MySQL a calculé (sur la base de l'arbre d'indexation) que les constantes couvrent une trop grande partie de la table et qu'un parcours de table serait plus rapide

  • Vous utilisez une clé avec une faible cardinalité (de nombreuses lignes correspondent à la valeur de la clé) via une autre colonne. Dans ce cas, MySQL suppose qu'en utilisant la clé, il effectuera probablement de nombreuses recherches de clé et qu'une analyse de table serait plus rapide.

pour éviter une analyse complète de la table, utilisez ci-dessous :

  • Utilisez ANALYZE TABLE tbl_name pour mettre à jour les distributions de clés pour la table analysée.

  • Utilisez FORCE INDEX pour la table analysée pour indiquer à MySQL que les analyses de table sont très coûteuses par rapport à l'utilisation de l'index donné :

    par exemple. SELECT * FROM t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;