बेहतर प्रदर्शन के लिए आप कंपोजिट इंडेक्स का उपयोग करने का प्रयास कर सकते हैं .. आपके जहां क्लॉज में शामिल कॉलम के आधार पर
और IN क्लॉज को इनर जॉइन में बदलने की कोशिश करें
यह मानते हुए कि आपकी IN क्लॉज सामग्री निश्चित मानों का एक सेट है आप संघ का उपयोग कर सकते हैं (या आपको आवश्यक मूल्य के साथ एक नई तालिका)
उदाहरण के लिए संघ का उपयोग करना (यदि आईएन क्लॉज एक सबक्वायरी है तो आप कुछ ऐसा ही कर सकते हैं)
select user_table.colA ,ColB , count(*) as count
from user_table
INNER JOIN (
select 'FIXED1' colA
union
select 'FIXED2'
....
union
select 'FIXEDX'
) t on t.colA = user_table.colA
where colC >='2019-09-01 00:00:00'
and ColB = 17
group by colA ,ColB;
आप कॉलम पर तालिका user_table पर एक समग्र अनुक्रमणिका भी जोड़ सकते हैं
colA, colB, colC
इंडेक्स का उपयोग करने के लिए कई पहलुओं का फैसला करने के लिए MySQL क्वेरी ऑप्टिमाइज़र द्वारा उपयोग किए जाने वाले तत्व से संबंधित है और इन सभी के लिए क्वेरी ऑप्टिमाइज़र एक लागत निर्दिष्ट करता है
जो भी आपको ध्यान में रखना चाहिए
- कहां क्लॉज में शामिल कॉलम
- तालिकाओं का आकार (और शामिल होने वाली तालिकाओं के आकार के मामले में नहीं)
- एक अनुमान है कि कितनी पंक्तियां प्राप्त की जाएंगी (यह तय करने के लिए कि किसी अनुक्रमणिका का उपयोग करना है या केवल तालिका को स्कैन करना है)
- यदि डेटाटाइप जिओन में कॉलम और जहां क्लॉज के बीच मेल खाते हैं या नहीं
- फ़ंक्शन या डेटा प्रकार रूपांतरण का उपयोग जिसमें मिलान की बेमेल शामिल है
- सूचकांक का आकार
- सूचकांक की प्रमुखता
और इन सभी विकल्पों के लिए एक मूल्य का मूल्यांकन किया जाता है और यह सूचकांक को चुनने के लिए
आपके मामले में दिनांक के रूप में colC का अर्थ डेटा रूपांतरण (स्ट्रिंग के रूप में शाब्दिक मानों का सम्मान करना) हो सकता है और इसके लिए सूचकांक नहीं चुना गया है ..
क्या इसके लिए भी मैंने गैर-रूपांतरित मूल्यों से संबंधित सबसे बाएं कॉलम के साथ एक समग्र अनुक्रमणिका का सुझाव दिया है