2009-07-28 8 views
0

Selon la documentation MySQL concernant Optimizing Queries With Explain:Optimisation des requêtes MySQL: Est-il toujours possible d'optimiser une requête afin qu'il n'utilise pas « ALL »

* ALL: Un scan de table est fait pour chaque combinaison des lignes des tables précédentes. Ce n'est normalement pas bon si la table est la première table non marquée const, et généralement très mauvaise dans tous les autres cas. Normalement, vous pouvez éviter ALL en ajoutant des index qui permettent la récupération de ligne à partir de la table en fonction des valeurs constantes ou des valeurs de colonnes des tables précédentes.

Est-ce que cela signifie que toute requête qui utilise peut tous être optimisé de sorte qu'il ne soit plus fait un scan table complète? En d'autres termes, en ajoutant les index corrects à la table, est-il possible d'éviter toujours d'utiliser ALL? Ou y a-t-il des cas où TOUS est inévitable, quels que soient les index que vous ajoutez?

+0

Comment récupéreriez-vous toutes les colonnes, si nécessaire? soit en utilisant * (ALL) soit en nommant chaque colonne séparément. ne change rien. – dusoft

+0

Ah. Pour clarifier: Supposons que la requête tente d'extraire 1 ou 2 lignes, pas toutes les lignes de la table entière. – Runcible

Répondre

2

Il est presque toujours possible (dans certains cas, lorsque l'analyse complète est moins chère) d'optimiser UNE requête pour éviter une analyse complète en créant des index appropriés. Toutefois, si vous exécutez plusieurs requêtes sur la même table, il existe des scénarios dans lesquels certains d'entre eux finiront par effectuer une analyse complète ou vous obtiendrez plus d'index alors vous avez des colonnes dans votre table :-)

1

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

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

Je ne suis pas tout à fait sûr pourquoi vous voulez faire une telle requête, si :)

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

Questions connexes