व्याख्या योजना के आधार पर, अनुकूलक ORDER BY rent . के लिए किसी भी अनुक्रमणिका का उपयोग करने में सक्षम नहीं है . तो निम्न का प्रयास करें:
- सुनिश्चित करें कि एक इंडेक्स
rent_dateपर मौजूद हैrents. का कॉलम मेज़। इस इंडेक्स का उपयोगORDER BY. को ऑप्टिमाइज़ करने के लिए किया जाएगा खंड। यह एक एकल स्तंभ अनुक्रमणिका, या एक बहु-स्तंभ एक (अन्य परिदृश्यों में प्रयुक्त) हो सकता है। लेकिन, बहु-स्तंभ वाले के मामले में, आपको यह सुनिश्चित करना होगा किrentस्तंभ अनुक्रमणिका क्रम में पहला स्तंभ है। - सुनिश्चित करें कि
idपर एक इंडेक्स मौजूद हैkickscooters. का कॉलम मेज़। एकल-स्तंभ/बहु-स्तंभ अनुक्रमणिका के बारे में विवरण बिंदु #1 के समान ही रहता है। - सुनिश्चित करें कि एक अनुक्रमणिका
serial_number. पर मौजूद हैkickscooter_states_190614. का कॉलम मेज़। एकल-स्तंभ/बहु-स्तंभ अनुक्रमणिका के बारे में विवरण बिंदु #1 के समान ही रहता है।
अब, इन अनुक्रमणिकाओं को सुनिश्चित करने के बाद, अपनी मूल क्वेरी का प्रयास करें। सबसे अधिक संभावना है, ऑप्टिमाइज़र ज्वाइन ऑर्डर को ऑप्टिमाइज़ करने में सक्षम होना चाहिए। इसके अलावा, उपरोक्त क्वेरी, आप STRAIGHT_JOIN का उपयोग करके जॉइन ऑर्डर लागू कर सकते हैं।
अनुकूलक संकेत। तो, निम्न क्वेरी को भी आज़माएं, और उन दोनों के बीच बेंचमार्क करें:
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;