sql >> Database >  >> RDS >> Mysql

Bestel op maximale waarde in drie verschillende kolommen

Het mag mogelijk zijn in een selectiequery (mogelijk met iets als case when hoewel ik niet zeker weet of dat is toegestaan ​​in de order by clausule zelf, YMMV afhankelijk van de DBMS), maar het is zelden een goed idee om berekeningen per rij te gebruiken als u wilt dat uw database goed schaalt naarmate tabellen groter worden ("niet de prestaties hebben van een eenbenig varken in een paardenrace" , zoals een van onze DBA's het welsprekend zegt).

In dergelijke situaties heb ik een extra (geïndexeerde) kolom ingesteld om het maximum te behouden en ervoor te zorgen dat de gegevensintegriteit behouden blijft door een trigger voor invoegen/bijwerken te gebruiken om die nieuwe kolom tot het maximum van de andere drie te forceren.

Omdat de meeste databasetabellen veel vaker worden gelezen dan geschreven, worden de kosten van de berekening afgeschreven over alle leesbewerkingen. De kosten worden alleen gedragen wanneer de gegevens zijn bijgewerkt en de zoekopdrachten verblindend snel worden, aangezien u bestelt op een enkele, geïndexeerde kolom:

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


  1. MySQL:SyntaxError:Onverwachte id

  2. Wat is de reden voor het volgen van SQL-code kon geen gegevens invoegen?

  3. Stuurprogramma JDBC PostgreSQL met Android

  4. Geen OQGraph in mijn MariaDB?