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

Použijte spojení nebo spojení – co je rychlejší

Sjednocení bude rychlejší, protože jednoduše předá první příkaz SELECT a poté analyzuje druhý příkaz SELECT a přidá výsledky na konec výstupní tabulky.

Spojení projde každý řádek obou tabulek, najde shody v druhé tabulce, a proto vyžaduje mnohem více zpracování kvůli hledání shodných řádků pro každý řádek.

UPRAVIT

Spojením myslím Union All, protože se to zdálo dostatečné pro to, čeho jste se snažili dosáhnout. I když normální Union je obecně rychlejší než Join.

EDITACE 2 (Odpověď na komentář @seebiscuit )

Nesouhlasím s ním. Technicky vzato bez ohledu na to, jak dobré je vaše spojení, je „JOIN“ stále dražší než čisté zřetězení. Udělal jsem blogový příspěvek, abych to dokázal na svém blogu codePERF[tečka]net . Prakticky řečeno, slouží 2 zcela odlišným účelům a je důležitější zajistit, aby vaše indexování bylo správné a pomocí správného nástroje pro danou úlohu.

Technicky si myslím, že to lze shrnout pomocí následujících 2 plánů provádění převzatých z mého příspěvku na blogu:

UNION ALL Prováděcí plán

JOIN Prováděcí plán

Praktické výsledky

Prakticky řečeno, rozdíl ve vyhledávání seskupených indexů je zanedbatelný:



  1. Záznamy SQL, jejichž platnost vyprší po 24 hodinách

  2. Oprava chyby 1064 (42000) při použití operátora MINUS v MariaDB

  3. Jak najít interval mezi dvěma daty v PostgreSQL

  4. Trvání dat v globální dočasné tabulce?