Имате left join venues
, но имате условия в where
клауза относно присъединените venues
ред, така че ще бъдат върнати само свързани редове. Това обаче е страничен проблем - прочетете защо изобщо не се нуждаете от присъединяване.
След това, ако градът е vancouver
, не е необходимо също тест за държава или щат.
И накрая, ако се опитвате да намерите „колко бъдещи събития има във Ванкувър“, нямате нужда от присъединяване, тъй като идентификаторът на мястото е константа!
Опитайте това:
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
Mysql ще използва индекса на venueid
без да се налага да използвате намек. Ако не стане, изпълнете това:
analyze events
което ще актуализира статистиката на разпределението на данните в индексираните колони. Имайте предвид, че ако много от вашите събития са във Ванкувър, по-ефективно е да не използвайте индекс (тъй като повечето от редовете така или иначе ще трябва да бъдат достъпни).