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.