sql >> Database >  >> RDS >> Mysql

Prestatieverschil in query tussen cmd en workbench mysql

Op basis van het Explain-plan kan optimizer geen index gebruiken voor ORDER BY rent . Dus probeer het volgende:

  1. Zorg ervoor dat er een index bestaat op de rent_date kolom van de rents tafel. Deze index wordt gebruikt om de ORDER BY . te optimaliseren clausule. Het kan een index met één kolom zijn of een index met meerdere kolommen (gebruikt in andere scenario's). Maar in het geval van een kolom met meerdere kolommen, moet u ervoor zorgen dat de rents kolom is de eerste kolom in de indexvolgorde.
  2. Zorg ervoor dat er een index bestaat op de id kolom van de kickscooters tafel. Details over index met één kolom / meerdere kolommen blijven hetzelfde als in punt #1.
  3. Zorg ervoor dat er een index bestaat op het serial_number kolom van de kickscooter_states_190614 tafel. Details over index met één kolom / meerdere kolommen blijven hetzelfde als in punt #1.

Probeer nu, nadat u deze indexen hebt gecontroleerd, uw oorspronkelijke zoekopdracht. Hoogstwaarschijnlijk zou de optimizer in staat moeten zijn om de Join Order te optimaliseren. Bovendien kun je met de bovenstaande zoekopdracht de samenvoegingsvolgorde afdwingen door STRAIGHT_JOIN te gebruiken optimalisatie hint. Probeer dus ook de volgende query en benchmark tussen de twee:

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;


  1. Bepalen of de Oracle-datum in het weekend valt?

  2. Hoe vind je rijen met een waarde die een kleine letter bevat

  3. MySQL 5:Maakt het uit in welke volgorde mijn GROUP BY-velden staan?

  4. MySQL Errno 150