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ć.