Mysql
 sql >> Database >  >> RDS >> Mysql

trattino in MySQL ordine per clausola

La risposta è nella domanda:

La parola chiave qui è "espressione" . Puoi usare le espressioni in ORDER BY clausola.

ORDER BY -order_line_groups.sequence DESC

è un'espressione aritmetica e il "trattino" non è un trattino ma un meno; un operatore matematico meno unario.

Come funziona?

Per quanto riguarda il risultato, funziona come previsto:

  • Se il tipo di colonna order_line_groups.sequence è un tipo numerico o un tipo di data e ora (sono memorizzati internamente anche come numeri), quindi il meno inverte l'ordine delle righe restituite. La clausola è equivalente a

      ORDER BY order_line_groups.sequence ASC
    
  • Se il tipo della colonna è un tipo di stringa quindi MySQL tenta di convertire i valori della colonna ai numeri (perché la sottrazione è un'operazione aritmetica e non è definita per le stringhe). Quando MySQL converte le stringhe in numeri, si ferma sul primo carattere che non è una cifra. A seconda dei dati che memorizzi nella colonna order_line_groups.sequence , più o meno dei suoi valori di stringa verranno convertiti nel numero 0 .

Per quanto riguarda la velocità, come spiegato nella pagina della documentazione fornita nella domanda MySQL non può utilizzare gli indici per risolvere il ORDER BY . Questo rende la query lenta.

Conclusione

Usando ORDER BY -order_line_groups.sequence rende la query lenta. Inoltre, non fornisce un buon modo per ordinare il set di risultati quando il tipo di colonna sequence è un tipo di stringa.