(Vysvětlení ztráty ORDER BYs
)
Standard SQL v podstatě říká, že poddotaz je neuspořádaná sada řádků. To znamená, že Optimalizátor může ignorovat ORDER BYs
v tabulce 'derived':FROM ( SELECT ... ORDER BY )
. V "nedávných" verzích MySQL a MariaDB, jako je ORDER BYs
jsou vynechány. Existují další případy, kdy ORDER BYs
je ignorováno.
V některých situací (tímto si nejsem jistý), přidáním LIMIT 99999999
(velké číslo) za ORDER BYs
oklame Optimalizátor, aby provedl ORDER BYs
. Stále však můžete „objednávku“ později ignorovat.
Obecné pravidlo pro MySQL:Vyhněte se poddotazům. (Jsou případy, kdy jsou poddotazy rychlejší, ale ne vaše.)
Silné pravidlo:musíte mít ORDER BYs
na krajní, pokud chcete, aby byly výsledky seřazeny.
Pokud jste přidali LIMIT 3
k odvozené tabulce ve vašem prvním dotazu byste dostali pouze CHARLES, DAVID, JAMES, ale ne nutně v tomto pořadí . To znamená, že byste potřebovali dva ORDER BYs
- jeden v odvozené tabulce, jeden na samém konci.