sql >> Databasteknik >  >> RDS >> Mysql

Är det något fel med joins som inte använder JOIN-nyckelordet i SQL eller MySQL?

Filtrering går enbart med WHERE kan vara extremt ineffektivt i vissa vanliga scenarier. Till exempel:

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

De flesta databaser kommer att köra denna fråga helt bokstavligt, först tar den kartesiska produkten av people och companies tabeller och sedan filtrering efter de som har matchande companyID och id fält. Medan den helt fria produkten inte existerar någon annanstans än i minnet och sedan bara för ett ögonblick, tar dess beräkning lite tid.

Ett bättre tillvägagångssätt är att gruppera begränsningarna med JOIN s där det är relevant. Detta är inte bara subjektivt lättare att läsa utan också mycket mer effektivt. Alltså:

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

Det är lite längre, men databasen kan titta på ON och använd den för att beräkna den fullständigt begränsade JOIN direkt, istället för att börja med allt och sedan begränsa. Detta är snabbare att beräkna (särskilt med stora datamängder och/eller kopplingar med många tabeller) och kräver mindre minne.

Jag ändrar varje fråga jag ser som använder "komma JOIN " syntax. Enligt min åsikt är det enda syftet med dess existens kortfattadhet. Med tanke på prestandapåverkan tror jag inte att detta är ett övertygande skäl.



  1. Grunderna för PostgreSQL Schema Management

  2. Oracle får kontrollsummavärde för en databit som definieras av en select-sats

  3. Använder setDate i PreparedStatement

  4. Migrera din Access-databas till SQL Server