sql >> Database >  >> RDS >> Mysql

Gebruik een vakbond of een join - Wat is sneller

Union zal sneller zijn, omdat het simpelweg de eerste SELECT-instructie passeert en vervolgens de tweede SELECT-instructie ontleedt en de resultaten aan het einde van de uitvoertabel toevoegt.

De Join doorloopt elke rij van beide tabellen en vindt overeenkomsten in de andere tabel, waardoor er veel meer verwerking nodig is vanwege het zoeken naar overeenkomende rijen voor elke rij.

BEWERKEN

Met Union bedoel ik Union All omdat het voldoende leek voor wat je probeerde te bereiken. Hoewel een normale Union over het algemeen sneller is dan Join.

BEWERK 2 (Antwoord op de opmerking van @seebiscuit)

Ik ben het niet met hem eens. Technisch gezien, hoe goed je join ook is, een "JOIN" is nog steeds duurder dan een pure aaneenschakeling. Ik heb een blogpost gemaakt om het te bewijzen op mijn blog codePERF[dot]net . Praktisch gesproken dienen ze 2 totaal verschillende doelen en het is belangrijker om ervoor te zorgen dat uw indexering juist is en dat u de juiste tool voor de klus gebruikt.

Technisch gezien denk ik dat het kan worden samengevat met behulp van de volgende 2 uitvoeringsplannen uit mijn blogpost:

UNION ALL Uitvoeringsplan

JOIN Uitvoeringsplan

Praktische resultaten

Praktisch gesproken is het verschil bij het opzoeken van een geclusterde index te verwaarlozen:



  1. Verschil tussen mysql, mysqladmin, mysqld

  2. totaal voor limiet in mysql krijgen met dezelfde query?

  3. Wat is ISO_year in sql-server

  4. Een inleiding tot MySQL-gegevenstypen