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

pomlčka v MySQL pořadí podle klauzule

Odpověď je v otázce:

Zde je klíčové slovo "výraz" . Můžete použít výrazy v ORDER BY doložka.

ORDER BY -order_line_groups.sequence DESC

je aritmetický výraz a "pomlčka" není pomlčka, ale mínus; unární mínus matematický operátor.

Jak to funguje?

Pokud jde o výsledek, funguje podle očekávání:

  • Pokud je typ sloupce order_line_groups.sequence je číselný typ nebo typ data a času (jsou také interně uloženy jako čísla), potom mínus obrátí pořadí vrácených řádků. Klauzule je ekvivalentní s

      ORDER BY order_line_groups.sequence ASC
    
  • Pokud je typ sloupce typ řetězce poté se MySQL pokusí převést hodnoty sloupce na čísla (protože odčítání je aritmetická operace a není definována pro řetězce). Když MySQL převádí řetězce na čísla, zastaví se na prvním znaku, který není číslicí. V závislosti na datech, která ukládáte do sloupce order_line_groups.sequence , více či méně jeho řetězcových hodnot se převede na číslo 0 .

Pokud jde o rychlost, jak je vysvětleno na stránce dokumentace uvedené v otázce MySQL nemůže použít indexy k vyřešení ORDER BY . Tím se dotaz zpomalí.

Závěr

Pomocí ORDER BY -order_line_groups.sequence zpomaluje dotaz. Navíc to neposkytuje dobrý způsob, jak třídit sadu výsledků, když je typ sloupce sequence je typ řetězce.



  1. Potřebujete pomoc s vytvořením dynamického menu

  2. Zaměňte citlivá data ve svých prováděcích plánech

  3. Room API - Jak získat nedávno vložené vygenerované ID entity?

  4. Vložení mysql do java desktopové aplikace