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

Proč STRAIGHT_JOIN tak drasticky zlepšuje tento dotaz a co to znamená, když je napsán za klíčovým slovem SELECT?

STRAIGHT_JOIN vynutí pořadí spojení tabulek, takže table1 je skenován ve vnější smyčce a table2 ve vnitřní smyčce.

Optimalizátor není dokonalý (ačkoli je stále docela slušný) a nejpravděpodobnější příčinou jsou zastaralé statistiky.

Ne, pouze když je optimalizátor špatný. K tomu může dojít, pokud je vaše distribuce dat silně zkreslená nebo ji nelze správně vypočítat (řekněme pro prostorové nebo fulltextové indexy).

Měli byste sbírat statistiky, sestavovat plány pro oba způsoby a rozumět tomu, co tyto plány znamenají.

Pokud to vidíte:

  1. Automaticky generovaný plán není optimální a nelze jej vylepšit standardními způsoby,

  2. STRAIGHT_JOIN verze je lepší, vždy tomu rozumíte a rozumíte proč vždy bude

a poté použijte STRAIGHT_JOIN .




  1. Dotaz mySQL pro sečtení částky ve sloupcích (měsíce)

  2. Zkontrolujte stav všech databázových poštovních zpráv na serveru SQL Server (T-SQL)

  3. Jak používat RANK() v SQL Server

  4. Získejte název volající procedury nebo funkce v Oracle PL/SQL