Anda memiliki left join venues
, tetapi Anda memiliki ketentuan di where
klausa di venues
yang tergabung baris, jadi hanya baris yang digabungkan yang akan dikembalikan. Namun, itu masalah sampingan - baca terus mengapa Anda tidak perlu bergabung sama sekali.
Selanjutnya, jika kotanya vancouver
, tidak perlu juga tes untuk negara atau negara bagian.
Terakhir, jika Anda mencoba mencari "berapa banyak acara mendatang di Vancouver", Anda tidak perlu bergabung, karena id tempat adalah konstan!
Coba ini:
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
Mysql akan menggunakan indeks pada venueid
tanpa Anda harus menggunakan petunjuk. Jika tidak, jalankan ini:
analyze events
yang akan memperbarui statistik distribusi data di kolom yang diindeks. Perhatikan bahwa jika banyak acara Anda berada di Vancouver, akan lebih efisien untuk tidak gunakan indeks (karena sebagian besar baris tetap harus diakses).