Scan restreint d'index
<<<
Scan d'index systématique Optimisation des commandes SELECT et autres requêtes
>>>

7.2.11 Comment MySQL optimise les clauses GROUP BY
7.2 Optimisation des commandes SELECT et autres requêtes
7 Optimisation de MySQL
 Manuel de Référence MySQL 4.1 : Version Française

Scan restreint d'index
->Scan d'index systématique

7.2.11.2 Scan d'index systématique

Un scan d'index systématique peut être un scan d'index total, un scan d'intervalle, suivant les conditions.

Lorsque les conditions pour faire un scan d'index restreint ne sont pas la, il est toujours possible d'éviter la constitution de tables temporaires pour les requêtes GROUP BY . S'il y a des conditions d'intervalle dans la clause WHERE , cette méthode ne va lire que les clés qui satisfont les conditions. Sinon, elle appliquera un scan d'index. Comme cette méthode lit toutes les clés de chaque intervalle définit par WHERE , ou scanne tout l'index s'il n'y a pas de condition d'intervalles, nous l'appelons un ``scan d'index systématique''. Notez qu'avec un scan d'index systématique, les opérations de regroupement sont faites après la lecture des clés qui satisfont les conditions.

Pour que cette méthode fonctionne, il suffit que toutes les colonnes d'une requête qui fasse référence à une partie de clé avant ou entre les conditions de la clause GROUP BY , soient des conditions constantes. Ces constantes remplissent les ``trous'' dans les clés de recherche, pour qu'il soit possible de former des préfixes comlets d'index. Ensuite, ces préfixes seront utilisés pour les recherches. Si vous avez besoin de tri avec GROUP BY , et qu'il est possible de former des clés de recherche avec des préfixes d'index, MySQL pourra aussi éviter le tri, car la recherche avec préfixe dans un index ordonnés lit les clés dans l'ordre.

Les requêtes suivantes ne fonctionneront pas avec la première méthode, mais fonctionneront toujours avec la deuxième méthode d'accès aux index (en supposant que nous avons l'index idx sur la table table t1 ) :

  • Il y a un ``trou'' dans le GROUP BY , mais il est couvert par la condition (c2 = 'a').
    
    SELECT c1, c2, c3 FROM t1 WHERE c2 = 'a' GROUP BY c1, c3;
    
  • GROUP BY ne commence pas par la première clé, mais il y a une condition qui fournit une constante pour cette partie de clé :
    
    SELECT c1, c2, c3 FROM t1 WHERE c1 = 'a' GROUP BY c2, c3;
    

<< Scan d'index systématique >>
Scan restreint d'index Comment MySQL optimise les clauses GROUP BY Optimisation des commandes SELECT et autres requêtes