Mysql
 sql >> Database >  >> RDS >> Mysql

Quale indice dovrei usare quando utilizzo JOIN su PRIMARY KEY

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.