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

mysql:jak uložit ORDER BY po LEFT JOIN bez změny pořadí?

(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.



  1. jak získat čas načítání v milisekundách nebo mikrosekundách v mysql

  2. MySQL tabulka s více hodnotami v jednom poli

  3. PostgreSQL Connection Pooling s PgBouncer

  4. CHYBA:HHH000299:Nelze dokončit aktualizaci schématu java.lang.NullPointerException