ここでは、2つのテーブルのどちらが内部結合の左側に表示されるかに応じて、2つの潜在的なインデックス作成戦略があります(どちらのテーブルも結合のいずれかの側に表示される可能性があります)。 HotelRoom テーブルには、Hotelよりもはるかに多くのレコードが含まれている可能性があります テーブル、Hotelを配置することをお勧めします 結合の左側にあるテーブル。これは、Hotelを意味します テーブルがスキャンされ、HotelRoomへの結合に使用されるインデックス 。次に、HotelRoomで次のインデックスを使用してみます。 :
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
これにより、結合が大幅に高速化され、WHEREがカバーされます。 句であり、HotelRoomのselectのすべての列もカバーします 。次の簡略化されたインデックスも非常に効果的である可能性があることに注意してください。
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
これは、結合とWHEREをカバーするだけです 句ですが、MySQLはそれを使用することを選択する可能性があります。