Hay dos posibles estrategias de indexación aquí, dependiendo de cuál de las dos tablas aparece en el lado izquierdo de la combinación interna (cualquier tabla podría aparecer potencialmente en cualquier lado de la combinación). Dado que el HotelRoom
Es probable que la tabla contenga muchos más registros que el Hotel
mesa, sugeriría colocar el Hotel
tabla en el lado izquierdo de la unión. Esto implicaría que el Hotel
la tabla se escanearía y el índice se usaría para unirse a HotelRoom
. Luego, podemos intentar usar el siguiente índice en HotelRoom
:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled, Name, RoomId);
Esto debería acelerar sustancialmente la unión, cubre el WHERE
cláusula, y también cubre todas las columnas en la selección en HotelRoom
. Tenga en cuenta que el siguiente índice simplificado también podría ser muy efectivo:
CREATE INDEX hotel_room_idx ON HotelRoom (HotelId, Deleted, Enabled);
Esto solo cubre la combinación y WHERE
cláusula, pero MySQL aún podría elegir usarla.