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

Quel index dois-je utiliser lors de l'utilisation de JOIN sur PRIMARY KEY

Il existe deux stratégies d'indexation potentielles ici, selon laquelle des deux tables apparaît sur le côté gauche de la jointure interne (l'une ou l'autre des tables peut potentiellement apparaître de chaque côté de la jointure). Étant donné que la HotelRoom table contient probablement beaucoup plus d'enregistrements que Hotel table, je suggérerais de placer le Hotel table sur le côté gauche de la jointure. Cela impliquerait que l'Hotel table serait scanné, et l'index utilisé pour la jointure à HotelRoom . Ensuite, nous pouvons essayer d'utiliser l'index suivant sur HotelRoom :

CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);

Cela devrait accélérer considérablement la jointure, couvre le WHERE clause, et couvre également toutes les colonnes de la sélection sur HotelRoom . Notez que l'index simplifié suivant peut également être très efficace :

CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);

Cela ne couvre que la jointure et WHERE clause, mais MySQL peut toujours choisir de l'utiliser.