3 votes

MYSQL Innodb : Clé primaire composite et recherche inversée

Je suis en train de créer un événement pour une table de recherche d'utilisateurs en utilisant le moteur de recherche Innodb.

Table Event_Users

event_id
user_id

Index (PRIMARY) -> event_id, user_id
Index (secondary) -> user_id, event_id ??

L'application effectuera des recherches entre l'utilisateur et l'événement et entre l'événement et l'utilisateur. Comment définir le second index si la clé primaire est en cluster ? Doit-il simplement être user_id et ensuite MYSQL se rendra compte que event_id est déjà présent dans le PK ou devrais-je être redondant et inclure user_id, event_id dans l'index secondaire ?

En outre, s'agit-il d'une bonne utilisation d'un index en grappe ? Tout conseil et toute aide concernant les index en grappe Innodb seraient grandement appréciés. Nous vous remercions de votre aide.

1voto

ProfileTwist Points 878

MySQL devrait être en mesure d'utiliser les champs dans le PK comme index de couverture sans créer un index secondaire composite.

C'est pourquoi :

Table (moteur = INNODB)

column_a  (int)
column_b  (int)

Primary Key -> column_a, column_b

Si vous souhaitez effectuer une recherche par column_b il suffit d'ajouter un index : column_b .

Puisque la table utilise le moteur Innodb, le PK existera dans le fichier column_b l'index. Mysql pourra utiliser l'index (utilisation de l'index). Il n'est pas nécessaire de créer un index column_b, column_a car cela serait redondant. - N'oubliez pas que inndob regroupe les données par PK et que tous les index font référence au PK.

Une clé de substitution n'est pas un bon choix pour cette conception, car il faudrait faire un travail supplémentaire pour s'assurer que l'on ne peut pas se passer de la clé de substitution. column_a, column_b n'existe pas encore.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X