sql >> Databáze >  >> RDS >> Mysql

Seřaďte podle maximální hodnoty ve třech různých sloupcích

může být možné provést ve výběrovém dotazu (případně pomocí něčeho jako case when i když si nejsem jistý, že je to povoleno v order by samotná klauzule, YMMV v závislosti na DBMS), ale zřídka je dobré používat výpočty po řádcích, pokud chcete, aby se vaše databáze dobře škálovala, když se tabulky zvětšují („nemít výkon jednonohého prasete v koňských dostizích“ , jak to výmluvně říká jeden z našich DBA).

V situacích, jako je tato, jsem nastavil další (indexovaný) sloupec, aby podržel maximum a zajistil zachování integrity dat pomocí spouštěče vložení/aktualizace, který vynutí tento nový sloupec na maximum ze zbývajících tří.

Protože většina databázových tabulek se čte mnohem častěji než zapisuje, amortizují se tím náklady na výpočet v rámci všech čtení. Náklady se hradí pouze tehdy, když jsou data aktualizována a dotazy jsou oslnivě rychlé, protože objednáváte v jediném indexovaném sloupci:

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


  1. MySQL/PHP – Zlomilo by umístění čísel uvozovkami jakékoli dotazy?

  2. Dílčí dotaz SELECT s podmínkou WHERE v Yii2 find() / QueryBuilder

  3. MySQL:Vytvoření tabulky s chybou FK (errno 150)

  4. Jak vyřešit tuto chybu--dbWriteTable()