Istnieją tutaj dwie potencjalne strategie indeksowania, w zależności od tego, która z dwóch tabel pojawia się po lewej stronie sprzężenia wewnętrznego (każda tabela może potencjalnie pojawić się po obu stronach sprzężenia). Biorąc pod uwagę, że HotelRoom tabela prawdopodobnie zawiera znacznie więcej rekordów niż Hotel tabeli, sugerowałbym umieszczenie Hotel tabela po lewej stronie złączenia. Oznaczałoby to, że Hotel tabela zostanie przeskanowana, a indeks użyty do przyłączenia do HotelRoom . Następnie możemy spróbować użyć następującego indeksu w HotelRoom :
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Powinno to znacznie przyspieszyć łączenie, obejmuje WHERE klauzuli, a także obejmuje wszystkie kolumny w select w HotelRoom . Zwróć uwagę, że następujący uproszczony indeks może być również bardzo skuteczny:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Obejmuje to tylko dołączenie i WHERE klauzula, ale MySQL może nadal z niej korzystać.