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

Leistungsunterschied bei Abfragen zwischen cmd und Workbench mysql

Basierend auf dem Explain-Plan kann der Optimierer keinen Index für ORDER BY rent verwenden . Versuchen Sie also Folgendes:

  1. Stellen Sie sicher, dass am rent_date ein Index vorhanden ist Spalte der rents Tisch. Dieser Index wird verwendet, um ORDER BY zu optimieren Klausel. Es kann sich um einen einspaltigen oder einen mehrspaltigen Index handeln (der in anderen Szenarien verwendet wird). Aber im Falle einer mehrspaltigen müssen Sie sicherstellen, dass die rent Spalte ist die erste Spalte in der Indexreihenfolge.
  2. Stellen Sie sicher, dass ein Index für die id vorhanden ist Spalte der kickscooters Tisch. Details zum einspaltigen / mehrspaltigen Index bleiben gleich wie in Punkt #1.
  3. Stellen Sie sicher, dass ein Index für die serial_number vorhanden ist Spalte von kickscooter_states_190614 Tisch. Details zum einspaltigen / mehrspaltigen Index bleiben gleich wie in Punkt #1.

Versuchen Sie nun, nachdem Sie diese Indizes sichergestellt haben, Ihre ursprüngliche Abfrage. Höchstwahrscheinlich sollte der Optimierer in der Lage sein, die Join-Reihenfolge zu optimieren. Außerdem können Sie bei der obigen Abfrage die Join-Reihenfolge erzwingen, indem Sie STRAIGHT_JOIN verwenden Optimierungshinweis. Probieren Sie also auch die folgende Abfrage aus und vergleichen Sie die beiden:

select
  r.user_id,
  k.id as kickscooter_id,
  st_astext(k.location) as location,
  k.created_at,
  k.serial_number,
  k_st.serial_number as states_serial_number,
  st_astext(k_st.gps) as gps_location,
  k_st.gps_updated_at,
  r.start_time,
  r.end_time
from kickscooters k
straight_join rents r
  on k.id= r.kickscooter_id
straight_join kickscooter_states_190614 k_st
  on k.serial_number = k_st.serial_number
order by r.rent_date
limit 999;