Hier gibt es zwei mögliche Indizierungsstrategien, je nachdem, welche der beiden Tabellen auf der linken Seite des inneren Joins erscheint (jede Tabelle könnte möglicherweise auf beiden Seiten des Joins erscheinen). Da das HotelRoom
Tabelle enthält wahrscheinlich viel mehr Datensätze als Hotel
Tisch würde ich vorschlagen, das Hotel
zu platzieren Tabelle auf der linken Seite des Joins. Dies würde bedeuten, dass das Hotel
Tabelle gescannt und der Index für den Join zu HotelRoom
verwendet . Dann können wir versuchen, den folgenden Index für HotelRoom
zu verwenden :
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Dies sollte den Join erheblich beschleunigen, deckt das WHERE
ab -Klausel und deckt auch alle Spalten in der Auswahl von HotelRoom
ab . Beachten Sie, dass der folgende vereinfachte Index ebenfalls sehr effektiv sein könnte:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Dies deckt nur den Join und WHERE
ab -Klausel, aber MySQL könnte sich dennoch dafür entscheiden, sie zu verwenden.