sql >> Databáze >  >> RDS >> Mysql

Je něco špatného na spojeních, která nepoužívají klíčové slovo JOIN v SQL nebo MySQL?

Filtrování spojení pouze pomocí WHERE může být v některých běžných scénářích extrémně neefektivní. Například:

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

Většina databází provede tento dotaz zcela doslovně, nejprve vezme kartézský produkt z people a companies tabulky a pak filtrování podle těch, které mají odpovídající companyID a id pole. Zatímco plně neomezený součin neexistuje nikde jinde než v paměti a poté jen na okamžik, jeho výpočet nějakou dobu trvá.

Lepší přístup je seskupit omezení pomocí JOIN kde je to relevantní. To je nejen subjektivně lépe čitelné, ale také mnohem efektivnější. Tedy:

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

Je to trochu delší, ale databáze je schopná se podívat na ON klauzuli a použijte ji k výpočtu plně omezeného JOIN přímo, než začít od všeho a pak omezení dolů. To je rychlejší na výpočet (zejména u velkých datových sad a/nebo spojení mnoha tabulek) a vyžaduje méně paměti.

Měním každý dotaz, který vidím a který používá „čárku JOIN " syntaxe. Podle mého názoru je jediným účelem jeho existence stručnost. Vzhledem k dopadu na výkon si nemyslím, že je to přesvědčivý důvod.



  1. Jak funguje funkce Exp() v PostgreSQL

  2. Zkrácení všech tabulek v databázi na serveru SQL - SQL Server / TSQL výukový program, část 55

  3. Nejjednodušší způsob testování uložené procedury Oracle

  4. Programově načíst zdroj uložené procedury SQL Server, který je identický se zdrojem vráceným uživatelským rozhraním SQL Server Management Studio?