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

Ordina per valore massimo in tre colonne diverse

può essere possibile eseguire in una query selezionata (possibilmente utilizzando qualcosa come case when anche se non sono sicuro che sia consentito in order by clausola stessa, YMMV a seconda del DBMS), ma raramente è una buona idea utilizzare calcoli per riga se si desidera che il database si ridimensioni bene man mano che le tabelle si ingrandiscono ("non avere le prestazioni di un maiale con una gamba sola in una corsa di cavalli" , come dice eloquentemente uno dei nostri DBA).

In situazioni come questa, ho impostato una colonna aggiuntiva (indicizzata) per mantenere il massimo e garantire che l'integrità dei dati sia mantenuta utilizzando un trigger di inserimento/aggiornamento per forzare quella nuova colonna al massimo delle altre tre.

Poiché la maggior parte delle tabelle del database viene letta molto più spesso di quanto non venga scritta, questo ammortizza il costo del calcolo su tutte le letture. Il costo viene sostenuto solo quando i dati vengono aggiornati e le query diventano incredibilmente veloci poiché ordini su un'unica colonna indicizzata:

select f1, f2, f3 from t order by fmax desc;