Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uporządkuj według maksymalnej wartości w trzech różnych kolumnach

może być możliwe do wykonania w zapytaniu wybierającym (prawdopodobnie przy użyciu czegoś takiego jak case when chociaż nie jestem pewien, czy jest to dozwolone w order by sama klauzula, YMMV w zależności od DBMS), ale rzadko jest dobrym pomysłem korzystanie z obliczeń na wiersz, jeśli chcesz, aby Twoja baza danych skalowała się dobrze, gdy tabele się powiększają ("nie ma wydajności jednonogiej świni w wyścigu konnym" , jak wymownie ujmuje to jeden z naszych administratorów baz danych).

W takich sytuacjach konfiguruję dodatkową (indeksowaną) kolumnę, aby utrzymać maksimum i zapewnić zachowanie integralności danych za pomocą wyzwalacza wstawiania/aktualizacji, aby wymusić w tej nowej kolumnie maksimum z pozostałych trzech.

Ponieważ większość tabel bazy danych jest odczytywana znacznie częściej niż zapisywana, koszt obliczeń amortyzuje się we wszystkich odczytach. Koszt jest ponoszony tylko wtedy, gdy dane są aktualizowane, a zapytania stają się oślepiająco szybkie, ponieważ składasz zamówienia w jednej, indeksowanej kolumnie:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać ostatnie 6 miesięcy z tabeli aktualności za pomocą MySQL?

  2. sprawdź, czy kolumna istnieje przed ALTER TABLE -- mysql

  3. Usuwanie z tabeli MySQL z ograniczeniami klucza obcego

  4. Zend\Db:Wybierz z podzapytania

  5. Wiele wartości rozwijanych wstawia się w jednym wierszu, a nie w wielu wierszach