sql >> Database >  >> RDS >> Mysql

Hoe deze MySQL-query te verbeteren met join?

Je hebt left join venues , maar je hebt voorwaarden in de where clausule op de samengevoegde venues rij, dus alleen samengevoegde rijen worden geretourneerd. Dat is echter een bijzaak - lees verder waarom je helemaal geen lidmaatschap nodig hebt.

Vervolgens, als de stad vancouver is , het is niet nodig om ook test voor land of staat.

Tot slot, als je probeert te achterhalen "hoeveel toekomstige evenementen zijn er in Vancouver", dan heb je geen lidmaatschap nodig, aangezien de locatie-ID een constante is!

Probeer dit:

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

Mysql gebruikt de index op venueid zonder dat je een hint hoeft te gebruiken. Als dit niet het geval is, voert u dit uit:

analyze events

waarmee de statistieken van de gegevensdistributie in de geïndexeerde kolommen worden bijgewerkt. Houd er rekening mee dat als veel van uw evenementen in Vancouver plaatsvinden, het efficiënter is om niet . te doen gebruik een index (omdat de meeste rijen toch moeten worden geopend).



  1. Kunnen we parameters doorgeven aan een weergave in SQL?

  2. PHP PDO haalt null op

  3. Hoe te SELECTEREN uit de kolom van het objecttype in Oracle 11g?

  4. Items in MySQL bestellen via een vaste lijst?