Dựa trên kế hoạch Giải thích, trình tối ưu hóa không thể sử dụng bất kỳ chỉ mục nào cho ORDER BY rent
. Vì vậy, hãy thử những cách sau:
- Đảm bảo rằng một chỉ mục tồn tại trên
rent_date
cộtrents
bàn. Chỉ mục này sẽ được sử dụng để tối ưu hóaORDER BY
mệnh đề. Nó có thể là một chỉ mục cột đơn hoặc một chỉ mục nhiều cột (được sử dụng trong các trường hợp khác). Tuy nhiên, trong trường hợp có nhiều cột, bạn cần đảm bảo rằngrent
là cột đầu tiên trong thứ tự chỉ mục. - Đảm bảo rằng một chỉ mục tồn tại trên
id
cột củakickscooters
bàn. Thông tin chi tiết về chỉ mục một cột / nhiều cột vẫn giống như ở điểm # 1. - Đảm bảo rằng một chỉ mục tồn tại trên
serial_number
cột củakickscooter_states_190614
bàn. Thông tin chi tiết về chỉ mục một cột / nhiều cột vẫn giống như ở điểm # 1.
Bây giờ, sau khi đảm bảo các chỉ mục này, hãy thử truy vấn ban đầu của bạn. Rất có thể, trình tối ưu hóa sẽ có thể tối ưu hóa Thứ tự tham gia. Ngoài ra, với truy vấn trên, bạn có thể thực thi thứ tự tham gia bằng cách sử dụng STRAIGHT_JOIN
gợi ý trình tối ưu hóa. Vì vậy, hãy thử cả truy vấn sau và điểm chuẩn giữa hai trong số chúng:
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;