Mysql
 sql >> Database >  >> RDS >> Mysql

Differenza di prestazioni nella query tra cmd e workbench mysql

In base al piano Explain, l'ottimizzatore non è in grado di utilizzare alcun indice per ORDER BY rent . Quindi prova quanto segue:

  1. Assicurati che esista un indice in rent_date colonna dei rents tavolo. Questo indice verrà utilizzato per ottimizzare il ORDER BY clausola. Può essere un indice a colonna singola o uno a più colonne (usato in altri scenari). Ma, in caso di multicolonna, devi assicurarti che il rent colonna è la prima colonna nell'ordine dell'indice.
  2. Assicurati che esista un indice sull'id colonna dei kickscooters tavolo. I dettagli sull'indice a colonna singola/multicolonna rimangono gli stessi del punto 1.
  3. Assicurati che esista un indice su serial_number colonna del kickscooter_states_190614 tavolo. I dettagli sull'indice a colonna singola/multicolonna rimangono gli stessi del punto 1.

Ora, dopo aver verificato questi indici, prova la tua query originale. Molto probabilmente, l'ottimizzatore dovrebbe essere in grado di ottimizzare l'ordine di unione. Inoltre, la query di cui sopra, puoi imporre l'ordine di adesione utilizzando STRAIGHT_JOIN suggerimento per l'ottimizzatore. Quindi, prova anche la seguente query e confronta le due:

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;