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

¿Cómo mejorar esta consulta MySQL usando join?

Tienes left join venues , pero tienes condiciones en el where cláusula sobre los venues adheridos fila, por lo que solo se devolverán las filas unidas. Sin embargo, ese es un problema secundario:siga leyendo para saber por qué no necesita unirse en absoluto.

A continuación, si la ciudad es vancouver , no hay necesidad de también prueba de país o estado.

Finalmente, si está tratando de encontrar "cuántos eventos futuros hay en Vancouver", no necesita unirse, ¡ya que la identificación del lugar es una constante!

Prueba esto:

select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate() 
and te_id != 0

Mysql usará el índice en venueid sin que tengas que usar una pista. Si no es así, ejecuta esto:

analyze events

que actualizará las estadísticas de la distribución de datos en las columnas indexadas. Tenga en cuenta que si muchos de sus eventos son en Vancouver, es más eficiente no use un índice (ya que la mayoría de las filas tendrán que ser accedidas de todos modos).