Berdasarkan rencana Jelaskan, pengoptimal tidak dapat menggunakan indeks apa pun untuk ORDER BY rent
. Jadi coba yang berikut ini:
- Pastikan ada indeks pada
rent_date
kolomrents
meja. Indeks ini akan digunakan untuk mengoptimalkanORDER BY
ayat. Ini bisa berupa indeks kolom tunggal, atau indeks multi-kolom (digunakan dalam skenario lain). Namun, dalam kasus multi-kolom, Anda perlu memastikan bahwarent
kolom adalah kolom pertama dalam urutan indeks. - Pastikan ada indeks di
id
kolomkickscooters
meja. Detail tentang indeks satu kolom / multi kolom tetap sama seperti pada poin #1. - Pastikan ada indeks di
serial_number
kolomkickscooter_states_190614
meja. Detail tentang indeks satu kolom / multi kolom tetap sama seperti pada poin #1.
Sekarang, setelah memastikan indeks ini, coba kueri asli Anda. Kemungkinan besar, pengoptimal harus dapat mengoptimalkan Pesanan Gabung. Selain itu, kueri di atas, Anda dapat menerapkan perintah bergabung dengan menggunakan STRAIGHT_JOIN
petunjuk pengoptimal. Jadi, coba kueri berikut juga, dan tolok ukur di antara keduanya:
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;