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

Sorter efter maks. værdi i tre forskellige kolonner

Det kan være muligt at gøre i en udvalgt forespørgsel (evt. ved at bruge noget som case when selvom jeg ikke er sikker på, at det er tilladt i order by selve klausulen, YMMV afhængigt af DBMS), men det er sjældent en god ide at bruge beregninger pr. række, hvis du ønsker, at din database skal skaleres godt, efterhånden som tabeller bliver større ("ikke have præstationen som en etbenet gris i et hestevæddeløb" , som en af ​​vores DBA'er veltalende udtrykker det).

I situationer som denne opsætter jeg en ekstra (indekseret) kolonne for at holde maksimum og sikre, at dataintegriteten opretholdes ved at bruge en indsæt/opdateringsudløser for at tvinge den nye kolonne til det maksimale af de tre andre.

Fordi de fleste databasetabeller læses langt oftere end skrevet, amortiserer dette omkostningerne ved beregningen på tværs af alle læsninger. Omkostningerne afholdes kun, når dataene er opdateret, og forespørgslerne bliver blændende hurtige, da du bestiller på en enkelt, indekseret kolonne:

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


  1. LEAST() Funktion i PostgreSQL

  2. Top 10 ofte stillede spørgsmål om SQL Server Performance Monitoring

  3. mysql-fejl 2005 - Ukendt MySQL-servervært 'localhost'(11001)

  4. TimeZone uoverensstemmelse i mysql og java