Existem duas estratégias de indexação potenciais aqui, dependendo de qual das duas tabelas aparece no lado esquerdo da junção interna (qualquer tabela pode aparecer em ambos os lados da junção). Dado que o
HotelRoom
provavelmente contém muito mais registros do que o Hotel
tabela, sugiro colocar o Hotel
tabela no lado esquerdo da junção. Isso implicaria que o Hotel
tabela seria escaneada e o índice usado para a junção a HotelRoom
. Então, podemos tentar usar o seguinte índice em HotelRoom
:CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Isso deve acelerar substancialmente a junção, abrange o
WHERE
cláusula, e também cobre todas as colunas no select em HotelRoom
. Observe que o seguinte índice simplificado também pode ser muito eficaz:CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Isso cobre apenas a junção e
WHERE
cláusula, mas o MySQL ainda pode optar por usá-la.