sql >> Database teknologi >  >> RDS >> Mysql

Brug en fagforening eller et medlem - hvad er hurtigere

Unionen vil være hurtigere, da den blot sender den første SELECT-sætning og derefter parser den anden SELECT-sætning og tilføjer resultaterne til slutningen af ​​outputtabellen.

Join vil gå gennem hver række i begge tabeller, og finde match i den anden tabel kræver derfor meget mere behandling på grund af søgning efter matchende rækker for hver række.

REDIGER

Med Union mener jeg Union All, da det virkede passende til det, du forsøgte at opnå. Selvom en normal Union generelt er hurtigere, så meld dig ind.

EDIT 2 (Svar på @seebiscuits kommentar)

Jeg er ikke enig med ham. Teknisk set, uanset hvor god dit join er, er et "JOIN" stadig dyrere end en ren sammenkædning. Jeg lavede et blogindlæg for at bevise det på min blog codePERF[dot]net . I praksis tjener de 2 helt forskellige formål, og det er vigtigere at sikre, at din indeksering er rigtig og at bruge det rigtige værktøj til opgaven.

Teknisk set tror jeg, at det kan opsummeres ved hjælp af følgende 2 udførelsesplaner taget fra mit blogindlæg:

UNION ALL Udførelsesplan

JOIN Udførelsesplan

Praktiske resultater

I praksis er forskellen på et klynget indeksopslag ubetydelig:



  1. DATABASE() – Hent det aktuelle databasenavn i MySQL

  2. 3 måder at få månedens navn fra en dato i MariaDB

  3. tjek om der findes en værdi i json encode array i mysql

  4. Liste over alle databaser fra en sammenkædet server i SQL Server (T-SQL-eksempler)