ここでは、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はそれを使用することを選択する可能性があります。