sql >> Databáze >  >> RDS >> Mysql

Jak zlepšit tento dotaz MySQL pomocí spojení?

left join venues , ale máte podmínky v where klauzule o spojených venues řádek, takže budou vráceny pouze spojené řádky. To je však vedlejší záležitost – čtěte dále, proč připojení vůbec nepotřebujete.

Další, pokud je město vancouver , není třeba také test pro zemi nebo stát.

A konečně, pokud se snažíte najít "kolik budoucích akcí je ve Vancouveru", nepotřebujete se připojit, protože id místa je konstantní!

Zkuste toto:

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

Mysql použije index na venueid aniž byste museli použít nápovědu. Pokud ne, proveďte toto:

analyze events

který bude aktualizovat statistiku distribuce dat v indexovaných sloupcích. Pamatujte, že pokud se mnoho vašich akcí koná ve Vancouveru, je efektivnější ne použijte index (protože většina řádků bude muset být stejně přístupná).



  1. SQL Server v.Next:Výkon STRING_AGG().

  2. Kdy použít STRAIGHT_JOIN s MySQL

  3. Pokus o provedení operace MINUS v MySQL

  4. Výchozí pořadí řádků ve SELECT dotazu - SQL Server 2008 vs SQL 2012