Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como melhorar esta consulta MySQL usando join?


Você left join venues , mas você tem condições no where cláusula nos venues associados row, portanto, somente as linhas unidas serão retornadas. No entanto, esse é um problema secundário - continue lendo para saber por que você não precisa de uma associação.

Em seguida, se a cidade for vancouver , não há necessidade de também teste para país ou estado.

Finalmente, se você está tentando descobrir "quantos eventos futuros estão em Vancouver", você não precisa de uma adesão, pois o ID do local é uma constante!

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

O MySQL usará o índice em venueid sem que você precise usar uma dica. Se isso não acontecer, execute isto:
analyze events

que atualizará as estatísticas da distribuição de dados nas colunas indexadas. Observe que, se muitos de seus eventos forem em Vancouver, é mais eficiente não use um índice (já que a maioria das linhas terá que ser acessada de qualquer maneira).