Baserat på Explain-planen kan optimizer inte använda något index för ORDER BY rent
. Så prova följande:
- Se till att det finns ett index på
rent_date
kolumnen irents
tabell. Detta index kommer att användas för att optimeraORDER BY
klausul. Det kan vara ett enda kolumnindex eller ett flerkolumnindex (används i andra scenarier). Men i händelse av flerkolumn en måste du se till attrent
kolumn är den första kolumnen i indexordningen. - Se till att det finns ett index på
id
kolumnen ikickscooters
tabell. Detaljer om index med en kolumn/flerkolumn förblir densamma som i punkt #1. - Se till att det finns ett index på
serial_number
kolumnen ikickscooter_states_190614
tabell. Detaljer om index med en kolumn/flerkolumn förblir densamma som i punkt #1.
Nu, efter att ha kontrollerat dessa index, prova din ursprungliga fråga. Troligtvis borde optimizer kunna optimera Join Order. Dessutom, ovanstående fråga, kan du genomdriva anslutningsbeställning genom att använda STRAIGHT_JOIN
optimeringstips. Så, prova följande fråga också, och jämför mellan de två:
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;