Mysql
 sql >> Base de données >  >> RDS >> Mysql

Index et clés primaires multi-colonnes

Je ne suis pas intimement familier avec les composants internes des index sur mySql, mais sur les deux produits de fournisseur de base de données que je connais (MsSQL, Oracle), les index sont des structures arborescentes équilibrées, dont les nœuds sont organisés comme un tuple séquencé des colonnes le index est défini sur (Dans la séquence définie )

Donc, à moins que mySql ne le fasse très différemment (probablement pas), tout index composite (sur plus d'une colonne) peut être utilisable par toute requête qui doit filtrer ou trier par un sous-ensemble des colonnes dans l'index, tant que la liste des colonnes est compatible, c'est-à-dire si les colonnes, lorsqu'elles sont séquencées de la même manière que la liste séquencée des colonnes dans l'index complet, constituent un sous-ensemble ordonné de l'ensemble complet des colonnes de l'index, qui commence au début de la séquence d'index réelle, sans espace sauf à la fin...

En d'autres termes, cela signifie que si vous avez un index sur (a,b,c,d) une requête qui filtre sur (a), (a,b) ou (a,b,c) peut également utiliser l'index , mais une requête qui doit filtrer sur (b), ou (c) ou (b,c) ne pourra pas utiliser l'index...

Donc dans votre cas, si vous avez souvent besoin de filtrer ou de trier sur la colonne item seul, vous devez ajouter un autre index sur cette colonne par lui-même...