Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak ulepszyć to zapytanie MySQL za pomocą złączenia?

Masz left join venues , ale masz warunki w where klauzula na połączonych venues wiersz, więc zostaną zwrócone tylko połączone wiersze. Jest to jednak kwestia poboczna — przeczytaj, dlaczego w ogóle nie potrzebujesz dołączania.

Następnie, jeśli miasto to vancouver , nie ma potrzeby również test dla kraju lub stanu.

Wreszcie, jeśli próbujesz dowiedzieć się „ile przyszłych wydarzeń odbędzie się w Vancouver”, nie potrzebujesz dołączania, ponieważ identyfikator miejsca jest stały!

Spróbuj tego:

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

Mysql użyje indeksu na venueid bez konieczności używania podpowiedzi. Jeśli nie, wykonaj to:

analyze events

który zaktualizuje statystyki dystrybucji danych w indeksowanych kolumnach. Pamiętaj, że jeśli wiele Twoich wydarzeń odbywa się w Vancouver, lepiej nie użyj indeksu (ponieważ i tak trzeba będzie uzyskać dostęp do większości wierszy).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL — Entity :wartość kolumny „IsPrimaryKey” w tabeli „TableDetails” to DBNull

  2. Powielanie tabeli, indeksów i danych MySQL

  3. Jak mogę wybrać tylko pierwsze odrębne dopasowanie z pola w MySQL?

  4. Parsowanie daty w MySQL

  5. Z punktu widzenia wydajności, jak efektywne jest użycie tymczasowej tabeli MySQL dla często używanej funkcji witryny?