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

Optimieren Sie eine ORDER BY-Abfrage

Es gibt eine Grenze dafür, wie viel Optimierung Sie an ORDER BY-Klauseln vornehmen können. Der erste, der manchmal hilft, ist ein Index für die richtigen Spalten in der richtigen Reihenfolge. Also, für Ihr Beispiel, ein (einzelner, zusammengesetzter) Index auf:

average_price_per_month ASC, phone_price_guestimate DESC, contract_length ASC

könnte helfen, aber der Optimierer könnte trotzdem entscheiden, dass es besser ist, einen anderen Index zu verwenden, um mit den Filterbegriffen in der Abfrage umzugehen, und dann wird er die so ausgewählten Daten selbst sortieren. Beachten Sie, dass der Optimierer sie nicht verwenden wird, es sei denn, der Index liefert die Daten in genau der richtigen sortierten Reihenfolge und die Verwendung des Index beschleunigt die Abfrage insgesamt. Ein Index für nur eine der zu sortierenden Spalten ist ein begrenzter Vorteil für den Optimierer, und er verwendet normalerweise keinen solchen Index.

Eine zu berücksichtigende Frage:

  • Wie schnell wird die Abfrage ohne die ORDER BY-Klausel ausgeführt.

Dadurch erhalten Sie eine sehr direkte Messung der Sortierkosten. Sie erwähnen 20 ms ohne Bestellung und 120 ms mit Bestellung, also ist ORDER BY mäßig teuer. Die nächste Frage könnte lauten:„Können Sie in Ihrer Anwendung seine Art übertreffen?“. Möglicherweise können Sie das tun, aber das Sortierpaket in einem DBMS ist normalerweise ziemlich gut optimiert, und Sie müssen wahrscheinlich hart arbeiten, um es zu übertreffen.