sql >> Base de Datos >  >> RDS >> Mysql

¿Qué índice debo usar cuando uso JOIN en PRIMARY KEY?

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.