Optimiser les requêtes MySQL: est-il toujours possible d'optimiser une requête afin qu'elle n'utilise pas «tout»

StackOverflow https://stackoverflow.com/questions/1196362

  •  20-09-2019
  •  | 
  •  

Question

Selon la documentation MySQL concernant Optimizing Queries With Explain:

* Tous: une analyse de table complète est effectuée pour chaque combinaison de lignes des tables précédentes. Ce n'est normalement pas bon si le tableau est le premier tableau non marqué, et généralement très mauvais dans tous les autres cas. Normalement, vous pouvez éviter tout en ajoutant des index qui permettent la récupération de ligne à partir du tableau en fonction des valeurs constantes ou des valeurs de colonne à partir de tables antérieures.

Est-ce que cela signifie que n'importe quel La requête qui utilise tous peut être optimisée afin qu'il ne soit plus une analyse de table complète?

En d'autres termes, en ajoutant les index corrects à la table, est-il possible d'éviter toujours d'utiliser tout? Ou y a-t-il des cas où tout est inévitable, quels que soient les index que vous ajoutez?

Était-ce utile?

La solution

C'est presque (il y a des cas où faire une numérisation complète est en fait moins cher) toujours possible d'optimiser une requête pour éviter une analyse complète en créant des index appropriés. Cependant, si vous exécutez plusieurs requêtes sur le même tableau, il y a des scénarios lorsque certains d'entre eux finiront par faire une numérisation complète ou vous finirez avec plus d'index, vous avez des colonnes dans votre tableau :-)

Autres conseils

Oui, il y a des requêtes où vous auriez du mal à produire un index approprié. Par exemple:

SELECT * FROM mytable WHERE colA * arg0 - colB > arg1

Je ne sais pas tout à fait pourquoi vous voudriez faire une telle requête, cependant :)

Cela dit, trop d'index utiliseront plus de mémoire de cache et d'espace disque, et ralentir les mises à jour et les inserts.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top