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

Které vnitřní spojení SQL je v mysql nejúčinnější a nejlepší?

Všechny jsou funkčně ekvivalentní. Dokonce ani oddělení mezi klauzulí WHERE a podmínkou JOIN nezmění výsledky při úplné práci s INNER spojeními (u spojení OUTER to může vadit). Kromě toho by všechny z nich měly pracovat se stejným plánem dotazů (ve skutečnosti nulový rozdíl ve výkonu). Na pořadí, ve kterém položky zahrnete, nezáleží . Dotazovací modul se může optimalizovat tak, jak nejlépe vyhovuje funkční specifikaci dotazu. I když identifikujete specifické chování s ohledem na objednávku, neměli byste s tím počítat. Specifikace umožňuje, aby zítřejší patch změnil dnešní chování v této oblasti. Pamatujte:celý smysl SQL je být založen na množinách a deklarativní :říkáte databázi co chcete, aby to bylo, ne jak chcete, aby to udělalo.

Nyní, když správnost a výkon jsou mimo cestu, jsme u věcí stylu:věcí, jako je produktivita programátora a čitelnost/udržovatelnost kódu. V tomto ohledu je možnost č. 4 v tomto seznamu daleko nejlepší volba, s #3 další nejlepší, zvláště když se začnete dostávat do složitějších dotazů. Jen nepoužívejte A,B syntaxe ještě; od verze standardu SQL z roku 1992 je zastaralý. Vždy vypište celý INNER JOIN (nebo LEFT JOIN /RIGHT JOIN /CROSS JOIN atd).

Vše, co bylo řečeno, i když na pořadí nezáleží (nebo by alespoň mělo) nezáleží na výkonu, při psaní SQL mi připadá užitečné používat ve svém přístupu konvenci, která diktuje pořadí. To mi pomáhá identifikovat chyby nebo nesprávné předpoklady později při ladění a odstraňování problémů. Tento obecný návod, kterým se snažím řídit, je chovat se, jako by na pořadí záleželo, a pak se s ohledem na to snažit udržet pracovní sadu paměti, kterou databáze potřebuje ke splnění dotazu, co nejmenší po co nejdelší dobu:začněte nejprve s menšími stoly a poté se připojte k větším; při zvažování velikosti tabulky vezměte v úvahu podmínky v klauzuli WHERE, které odpovídají indexu; preferujte vnitřní spoje před vnějšími, pokud máte na výběr; vypsat podmínky spojení, aby se upřednostnily indexy (zejména primární/klastrové klíče) jako první a další podmínky při spojení jako druhé.




  1. Datum a čas ve 24hodinovém formátu

  2. Oracle 10:Použití HEXTORAW k vyplnění dat blob

  3. Twitter bootstrap typeahead vrátí více hodnot a vyplní editační pole

  4. Jak zkombinuji svých 5 nejlepších platů a 5 nejnižších platů pro zobrazení v Oracle?