sql >> Database teknologi >  >> RDS >> Mysql

Er der noget galt med joins, der ikke bruger JOIN nøgleordet i SQL eller MySQL?

Filtrering forbindes udelukkende ved hjælp af WHERE kan være ekstremt ineffektiv i nogle almindelige scenarier. For eksempel:

SELECT * FROM people p, companies c 
    WHERE p.companyID = c.id AND p.firstName = 'Daniel'

De fleste databaser vil udføre denne forespørgsel helt bogstaveligt, idet de først tager det kartesiske produkt af people og companies tabeller og derefter filtrering efter dem, der har matchende companyID og id felter. Selvom det fuldstændigt ubegrænsede produkt ikke eksisterer andre steder end i hukommelsen og så kun et øjeblik, tager dets beregning noget tid.

En bedre tilgang er at gruppere begrænsningerne med JOIN s hvor det er relevant. Dette er ikke kun subjektivt nemmere at læse, men også langt mere effektivt. Således:

SELECT * FROM people p JOIN companies c ON p.companyID = c.id
    WHERE p.firstName = 'Daniel'

Det er lidt længere, men databasen er i stand til at se på ON klausul og brug den til at beregne den fuldt begrænsede JOIN direkte i stedet for at starte med alt og derefter begrænse. Dette er hurtigere at beregne (især med store datasæt og/eller sammenføjninger med mange tabeller) og kræver mindre hukommelse.

Jeg ændrer hver forespørgsel, jeg ser, som bruger "komma JOIN " syntaks. Efter min mening er det eneste formål med dets eksistens kortfattethed. I betragtning af virkningen på ydeevnen, tror jeg ikke, at dette er en tvingende grund.



  1. PostgreSQL's date_trunc i mySQL

  2. Indsæt data og indstil fremmednøgler med Postgres

  3. Sådan ændres standarddatabasens mailprofil for en bruger i SQL Server (T-SQL)

  4. MySQL InnoDB Cluster 8.0 - En komplet gennemgang af operationen:Anden del