Bạn còn left join venues
, nhưng bạn có các điều kiện trong where
mệnh đề về venues
đã tham gia hàng, vì vậy chỉ các hàng đã tham gia sẽ được trả lại. Tuy nhiên, đó là một vấn đề phụ - hãy đọc để biết lý do tại sao bạn không cần tham gia.
Tiếp theo, nếu thành phố là vancouver
, không cần phải cũng kiểm tra quốc gia hoặc tiểu bang.
Cuối cùng, nếu bạn đang cố gắng tìm "có bao nhiêu sự kiện trong tương lai ở Vancouver", bạn không cần tham gia vì id địa điểm là một hằng số!
Hãy thử điều này:
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
Mysql sẽ sử dụng chỉ mục trên venueid
mà bạn không cần phải sử dụng một gợi ý. Nếu không, hãy thực hiện điều này:
analyze events
sẽ cập nhật thống kê về phân phối dữ liệu trong các cột được lập chỉ mục. Lưu ý rằng nếu nhiều sự kiện của bạn diễn ra ở Vancouver, thì không sẽ hiệu quả hơn sử dụng một chỉ mục (vì hầu hết các hàng vẫn phải được truy cập).