Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie die oberen N-Werte jeder Spalte in MySql

Dies ist NICHT etwas, das Sie in einer einzigen Abfrage tun möchten. Teilen Sie es einfach auf, eine Abfrage für jede Spalte. Unter den richtigen Umständen (auch bekannt als mit den richtigen Indizes und richtigen Spaltentypen) kann MySQL diese Abfragen tatsächlich durch Kurzschließen optimieren, sodass es nie die gesamte Tabelle scannen muss, sondern einfach die obersten 5 Werte herauszieht und fertig.

SELECT column1 FROM table ORDER BY column1 DESC LIMIT 5
SELECT column2 FROM table ORDER BY column2 DESC LIMIT 5
etc

Wenn Sie versuchen, sie alle zu einer riesigen, klobigen Abfrage zusammenzufügen, können Sie den Optimierer nur davon überzeugen, einfach aufzugeben und die gesamte Tabelle 50 Mal erneut zu scannen und dann 50 temporäre Tabellen und wahrscheinlich etwas Dateisortierung für ein gutes Maß zu verwenden. Wenn Ihre Tabelle also nicht etwa 10 Zeilen enthält (was offensichtlich nicht der Fall ist), sind 50 separate Abfragen immer schneller.