sql >> Databasteknik >  >> RDS >> Mysql

Ordna efter maxvärde i tre olika kolumner

Det kan vara möjligt att göra i en urvalsfråga (möjligen med något som case when även om jag inte är säker på att det är tillåtet i order by klausulen själv, YMMV beroende på DBMS) men det är sällan en bra idé att använda beräkningar per rad om du vill att din databas ska skalas bra när tabellerna blir större ("inte ha prestanda som en enbent gris i en hästkapplöpning" , som en av våra DBA:er vältaligt uttrycker det).

I sådana här situationer ställer jag in ytterligare en (indexerad) kolumn för att hålla maximalt och säkerställa att dataintegriteten upprätthålls genom att använda en insättnings-/uppdateringsutlösare för att tvinga den nya kolumnen till det maximala av de andra tre.

Eftersom de flesta databastabeller läses mycket oftare än skrivna, amorterar detta kostnaden för beräkningen över alla läsningar. Kostnaden bärs bara när data uppdateras och frågorna blir bländande snabba eftersom du beställer på en enda, indexerad kolumn:

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


  1. MySQL SELECT endast inte null-värden

  2. Hur man beräknar skillnaden mellan två datum i månader i MySQL

  3. Ansluter Ignition till Microsoft Access

  4. Fånga MySQL-varningar i Python