Lorsque je parle d'index multi-colonnes, j'utilise une analogie avec un annuaire téléphonique. Un annuaire téléphonique est essentiellement un index sur le nom de famille, puis le prénom. Ainsi, l'ordre de tri est déterminé par la "colonne" qui est la première. Les recherches se répartissent en plusieurs catégories :
-
Si vous recherchez des personnes dont le nom de famille est Smith, vous pouvez les trouver facilement car le livre est trié par nom de famille.
-
Si vous recherchez des personnes dont le prénom est John, l'annuaire téléphonique ne vous aide pas car les John sont éparpillés dans tout l'annuaire. Vous devez parcourir tout l'annuaire téléphonique pour les trouver tous.
-
Si vous recherchez des personnes avec un nom de famille spécifique Smith et un prénom spécifique John, le livre vous aide car vous trouvez les Smith triés ensemble, et au sein de ce groupe de Smiths, les Johns sont également trouvés dans un ordre trié.
Si vous aviez un annuaire téléphonique trié par prénom puis par nom de famille, le tri de l'annuaire vous aiderait dans les cas n°2 et n°3 ci-dessus, mais pas le cas n°1.
Cela explique les cas de recherche de valeurs exactes, mais que se passe-t-il si vous recherchez par plages de valeurs ? Supposons que vous souhaitiez rechercher toutes les personnes dont le prénom est John et dont le nom de famille commence par "S" (Smith, Saunders, Staunton, Sherman, etc.). Les Johns sont triés sous 'J' dans chaque nom de famille, mais si vous voulez tous les Johns pour tous les noms de famille commençant par 'S', les Johns ne sont pas regroupés. Ils sont à nouveau dispersés, vous devez donc parcourir tous les noms dont le nom de famille commence par "S". Alors que si l'annuaire téléphonique était organisé par prénom puis par nom de famille, vous retrouveriez tous les Johns ensemble, alors au sein des Johns, tous les noms de famille en 'S' seraient regroupés.
Ainsi, l'ordre des colonnes dans un index multi-colonnes est vraiment important. Un type de requête peut nécessiter un certain ordre des colonnes pour l'index. Si vous avez plusieurs types de requêtes, vous aurez peut-être besoin de plusieurs index pour les aider, avec des colonnes dans des ordres différents.
Vous pouvez lire ma présentation Comment concevoir des index, vraiment pour plus d'informations.