In base al piano Explain, l'ottimizzatore non è in grado di utilizzare alcun indice per ORDER BY rent
. Quindi prova quanto segue:
- Assicurati che esista un indice in
rent_date
colonna deirents
tavolo. Questo indice verrà utilizzato per ottimizzare ilORDER 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 ilrent
colonna è la prima colonna nell'ordine dell'indice. - Assicurati che esista un indice sull'
id
colonna deikickscooters
tavolo. I dettagli sull'indice a colonna singola/multicolonna rimangono gli stessi del punto 1. - Assicurati che esista un indice su
serial_number
colonna delkickscooter_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;