sql >> Base de Datos >  >> RDS >> Mysql

guión en MySQL order by cláusula

La respuesta está en la pregunta:

La palabra clave aquí es "expresión" . Puede usar expresiones en el ORDER BY cláusula.

ORDER BY -order_line_groups.sequence DESC

es una expresión aritmética y el "guión" no es un guión sino un signo menos; un operador matemático menos unario.

¿Cómo funciona?

En cuanto al resultado, funciona como se esperaba:

  • Si el tipo de columna order_line_groups.sequence es un tipo numérico o un tipo de fecha y hora (también se almacenan internamente como números), luego el signo menos invierte el orden de las filas devueltas. La cláusula es equivalente a

      ORDER BY order_line_groups.sequence ASC
    
  • Si el tipo de la columna es tipo de cadena luego MySQL intenta convertir los valores de la columna a números (porque la resta es una operación aritmética y no está definida para cadenas). Cuando MySQL convierte cadenas en números, se detiene en el primer carácter que no es un dígito. Dependiendo de los datos que almacene en la columna order_line_groups.sequence , más o menos de sus valores de cadena se convertirán en el número 0 .

Con respecto a la velocidad, como se explica en la página de documentación provista en la pregunta MySQL no puede usar índices para resolver el ORDER BY . Esto hace que la consulta sea lenta.

Conclusión

Usando ORDER BY -order_line_groups.sequence hace que la consulta sea lenta. Además, no proporciona una buena manera de ordenar el conjunto de resultados cuando el tipo de columna sequence es un tipo de cadena.