sql >> Databáze >  >> RDS >> Sqlserver

LEFT JOIN Výrazně rychlejší než INNER JOIN

Levé spojení se zdá být rychlejší, protože SQL je nucen provést nejprve menší výběr a poté se připojit k této menší sadě záznamů. Z nějakého důvodu to optimalizátor nechce dělat přirozeně.

3 způsoby, jak přinutit, aby se spojení uskutečnila ve správném pořadí:

  1. Vyberte první podmnožinu dat do dočasné tabulky (nebo proměnné tabulky) a poté ji připojte
  2. Používejte levá spojení (a pamatujte, že to může vrátit jiná data, protože se jedná o levé spojení, nikoli vnitřní spojení)
  3. použijte klíčové slovo FORCE ORDER. Upozorňujeme, že pokud se změní velikosti tabulek nebo schémata, plán dotazů nemusí být správný (viz https://dba.stackexchange.com/questions/45388/forcing-join-order )


  1. PostgreSQL pole prvků, z nichž každý je cizí klíč

  2. Data překrývající se MySQL, žádná konfliktní

  3. MySQL versus PDO

  4. Proč Oracle ignoruje index pomocí ORDER BY?