Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

hífen na ordem do MySQL por cláusula


A resposta está na pergunta:

A palavra-chave aqui é "expressão" . Você pode usar expressões no ORDER BY cláusula.
ORDER BY -order_line_groups.sequence DESC

é uma expressão aritmética e o "hífen" não é um hífen, mas um sinal de menos; um operador matemático unário menos.

Como funciona?


Em relação ao resultado, funciona como esperado:

  • Se o tipo de coluna order_line_groups.sequence é um tipo numérico ou um tipo de data e hora (eles também são armazenados internamente como números), então o menos inverte a ordem das linhas retornadas. A cláusula é equivalente a
      ORDER BY order_line_groups.sequence ASC
    

  • Se o tipo da coluna for um tipo de string então o MySQL tenta converter os valores da coluna para números (porque a subtração é uma operação aritmética e não é definida para strings). Quando o MySQL converte strings em números, ele para no primeiro caractere que não é um dígito. Dependendo dos dados armazenados na coluna order_line_groups.sequence , mais ou menos de seus valores de string serão convertidos para o número 0 .

Com relação à velocidade, conforme explicado na página de documentação fornecida na pergunta MySQL não pode usar índices para resolver o erro ORDER BY . Isso torna a consulta lenta.

Conclusão


Usando ORDER BY -order_line_groups.sequence torna a consulta lenta. Além disso, ele não fornece uma boa maneira de classificar o conjunto de resultados quando o tipo de coluna sequence é um tipo de string.