Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

इंडेक्स का उपयोग केवल मजबूर होने पर ही क्यों किया जाता है लेकिन डिफ़ॉल्ट रूप से नहीं?

बेहतर प्रदर्शन के लिए आप कंपोजिट इंडेक्स का उपयोग करने का प्रयास कर सकते हैं .. आपके जहां क्लॉज में शामिल कॉलम के आधार पर
और 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 का अर्थ डेटा रूपांतरण (स्ट्रिंग के रूप में शाब्दिक मानों का सम्मान करना) हो सकता है और इसके लिए सूचकांक नहीं चुना गया है ..

क्या इसके लिए भी मैंने गैर-रूपांतरित मूल्यों से संबंधित सबसे बाएं कॉलम के साथ एक समग्र अनुक्रमणिका का सुझाव दिया है



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगकर्ता नाम द्वारा Laravel में उपयोगकर्ता खोजें

  2. फ्री होस्ट के माध्यम से mysql को दूरस्थ रूप से कनेक्ट करना

  3. टॉमकैट 7.0.42 पूलिंग, हाइबरनेट 4.2, माइस्क्ल रॉक सॉलिड ऑटोरकनेक्ट सॉल्यूशन

  4. MySQL में कैसे चेक करें यदि दिनांकों की श्रेणी में कोई तिथि तालिका में रखी गई तिथियों के बीच आती है

  5. MySQL में टेबल को अनपिवोट कैसे करें