Er zijn hier twee mogelijke indexeringsstrategieën, afhankelijk van welke van de twee tabellen aan de linkerkant van de inner join wordt weergegeven (beide tabellen kunnen mogelijk aan weerszijden van de join verschijnen). Aangezien de HotelRoom
tabel bevat waarschijnlijk veel meer records dan de Hotel
tafel, stel ik voor om het Hotel
. te plaatsen tabel aan de linkerkant van de join. Dit zou betekenen dat het Hotel
tabel zou worden gescand, en de index die werd gebruikt voor de join naar HotelRoom
. Dan kunnen we proberen de volgende index te gebruiken op HotelRoom
:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Dit zou de samenvoeging aanzienlijk moeten versnellen, dekt de WHERE
clausule, en omvat ook alle kolommen in de selectie op HotelRoom
. Merk op dat de volgende vereenvoudigde index ook erg effectief kan zijn:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Dit dekt alleen de join en WHERE
clausule, maar MySQL kan er nog steeds voor kiezen om het te gebruiken.