Ci sono due potenziali strategie di indicizzazione qui, a seconda di quale delle due tabelle appare sul lato sinistro del join interno (entrambe le tabelle potrebbero potenzialmente apparire su entrambi i lati del join). Dato che il HotelRoom
è probabile che la tabella contenga molti più record rispetto a Hotel
tabella, suggerirei di posizionare il Hotel
tabella sul lato sinistro del join. Ciò implicherebbe che l'Hotel
la tabella verrebbe scansionata e l'indice utilizzato per il join a HotelRoom
. Quindi, possiamo provare a utilizzare il seguente indice su HotelRoom
:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Questo dovrebbe velocizzare sostanzialmente il join, copre il WHERE
clausola e copre anche tutte le colonne nella selezione su HotelRoom
. Nota che anche il seguente indice semplificato potrebbe essere molto efficace:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Questo copre solo il join e WHERE
clausola, ma MySQL potrebbe comunque scegliere di utilizzarla.