Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welchen Index sollte ich verwenden, wenn ich JOIN für PRIMARY KEY verwende?

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.