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

Ordenar por valor máximo em três colunas diferentes


Ele pode ser possível fazer em uma consulta de seleção (possivelmente usando algo como case when embora eu não tenha certeza de que isso seja permitido no order by cláusula em si, YMMV dependendo do DBMS), mas raramente é uma boa ideia usar cálculos por linha se você quiser que seu banco de dados escale bem à medida que as tabelas aumentam ("não tem o desempenho de um porco de uma perna em uma corrida de cavalos" , como um de nossos DBAs coloca eloquentemente).

Em situações como essa, configuro uma coluna adicional (indexada) para manter o máximo e garantir que a integridade dos dados seja mantida usando um gatilho de inserção/atualização para forçar essa nova coluna ao máximo das outras três.

Como a maioria das tabelas de banco de dados são lidas com muito mais frequência do que gravadas, isso amortiza o custo do cálculo em todas as leituras. O custo é suportado apenas quando os dados são atualizados e as consultas se tornam incrivelmente rápidas, pois você está solicitando em uma única coluna indexada:
select f1, f2, f3 from t order by fmax desc;