[+/-]
        La méthode de combinaison d'index (Index
        Merge, index_merge) est utilisée
        pour lire des lignes avec plusieurs scans
        ref, ref_or_null et
        range et les combiner en un seul résultat.
        Cette méthode est employée lorsque les conditions sur la table
        sont un groupe de conditions disjointes pour lesquelles
        ref, ref_or_null, ou
        range peuvent être utilisées avec
        différentes clés.
      
Ce type d'optimisation ``join'' est nouveau en MySQL 5.0.0, et représente un changement significatif dans le comportement de MySQL avec les index, car l'ancienne règle était que le serveur n'utilisait qu'un seul index au plus pour chaque table référencée.
        Dans le résultat de EXPLAIN, cette méthode
        apparait sous le nom de index_merge dans la
        colonne de type type. Dans ce cas, la colonne
        key contient la liste des index utilisés, et
        key_len contient la liste des tailles
        maximales de clé pour chaque index.
      
Exemples :
SELECT * FROMtbl_nameWHEREkey_part1= 10 ORkey_part2= 20; SELECT * FROMtbl_nameWHERE (key_part1= 10 ORkey_part2= 20) ANDnon_key_part=30; SELECT * FROM t1, t2 WHERE (t1.key1IN (1,2) OR t1.key2LIKE 'value%') AND t2.key1=t1.some_col; SELECT * FROM t1, t2 WHERE t1.key1=1 AND (t2.key1=t1.some_colOR t2.key2=t1.some_col2);
        La méthode de combinaison d'index a différentes méthodes
        d'accès aux index, tels que présentées dans le champ
        Extra du résultat de la commande
        EXPLAIN :
      
intersection
union
sort-union
Les sections suivantes décrivent ces méthodes avec plus de détails :
Note : L'algorithme d'optimisation des combinaisons d'index a les limitations suivantes :
Si un scan d'intervalle est possible avec une clé, la combinaison d'index sera omise. Par exemple :
SELECT * FROM t1 WHERE (goodkey1 < 10 OR goodkey2 < 20) AND badkey < 30;
Pour cette requête, deux solutions sont possibles :
                Une combinaison d'index avec la condition
                (goodkey1 < 10 OR goodkey2 <
                20).
              
                Un scan d'intervalle avec la condition badkey
                < 30.
              
            Mais ici, l'optimisateur ne considèrera que la seconde
            méthode. Si ce n'est pas ce que vous souhaitez, vous pouvez
            forcer l'optimiseur à utiliser
            index_merge en utilisant les clauses
            IGNORE INDEX et FORCE
            INDEX. Les requêtes suivantes seront exécutées
            avec une combinaison d'index :
          
SELECT * FROM t1 FORCE INDEX(goodkey1,goodkey2) WHERE (goodkey1 < 10 OR goodkey2 < 20) AND badkey < 30; SELECT * FROM t1 IGNORE INDEX(badkey) WHERE (goodkey1 < 10 OR goodkey2 < 20) AND badkey < 30;
            Si votre requête a une clause WHERE
            complexe avec des conditions
            AND/OR imbriquées, et
            que MySQL n'a pas identifié la méthode optimale, essayez
            de répartir les conditions en utilisant les lois
            d'identitée :
          
(xANDy) ORz= (xORz) AND (yORz) (xORy) ANDz= (xANDz) OR (yANDz)
        Le choix entre les méthodes de index_merge
        est basée sur le calcul de coûts.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

