sql >> Databasteknik >  >> RDS >> Mysql

Använd en fackförening eller en gå med - vad är snabbare

Unionen kommer att gå snabbare, eftersom den helt enkelt skickar den första SELECT-satsen och sedan analyserar den andra SELECT-satsen och lägger till resultaten i slutet av utdatatabellen.

Join kommer att gå igenom varje rad i båda tabellerna, och hitta matchningar i den andra tabellen behöver därför mycket mer bearbetning på grund av att man söker efter matchande rader för varje rad.

REDIGERA

Med Union menar jag Union All eftersom det verkade tillräckligt för det du försökte uppnå. Även om en normal Union i allmänhet är snabbare än Gå med.

EDIT 2 (Svara på @seebiscuits kommentar)

Jag håller inte med honom. Tekniskt sett, oavsett hur bra din join är, är en "JOIN" fortfarande dyrare än en ren sammankoppling. Jag gjorde ett blogginlägg för att bevisa det på min blogg codePERF[dot]net . I praktiken tjänar de två helt olika syften och det är viktigare att se till att din indexering är rätt och att använda rätt verktyg för jobbet.

Tekniskt sett tror jag att det kan summeras med hjälp av följande två genomförandeplaner hämtade från mitt blogginlägg:

UNION ALL Utförandeplan

JOIN Utförandeplan

Praktiska resultat

I praktiken är skillnaden på en klustrad indexuppslagning försumbar:



  1. Postgres släpptabell syntaxfel

  2. 7 sätt att hitta dubbletter av rader i SQL Server samtidigt som du ignorerar en primärnyckel

  3. MySQL:Transaktioner över flera trådar

  4. Uppgradering till PostgreSQL13