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

Column1 <=X <=Column2 को संतुष्ट करने वाली पंक्तियों की खोज करने वाली SQL क्वेरी बहुत धीमी है

मुझे एक समाधान मिला जो तालिका में डेटा के गुणों पर निर्भर करता है। मेरे पास एक अधिक सामान्य समाधान होगा जो वर्तमान डेटा पर निर्भर नहीं है, लेकिन फिलहाल मेरे पास सबसे अच्छा है।

मूल क्वेरी के साथ समस्या:

SELECT P, Y, Z FROM SomeTable WHERE FirstX <= ? AND LastX >= ? LIMIT 10;

यह है कि निष्पादन के लिए FirstX . में प्रविष्टियों के एक बड़े प्रतिशत को स्कैन करने की आवश्यकता हो सकती है ,LastX ,P सूचकांक जब पहली शर्त FirstX <= ? पंक्तियों के एक बड़े प्रतिशत से संतुष्ट हैं।

निष्पादन समय को कम करने के लिए मैंने जो किया वह यह है कि LastX-FirstX अपेक्षाकृत छोटा है।

मैंने क्वेरी चलाई:

SELECT MAX(LastX-FirstX) FROM SomeTable;

और मिला 4200000

इसका मतलब है कि FirstX >= LastX – 4200000 तालिका में सभी पंक्तियों के लिए।

तो LastX >= ? . को संतुष्ट करने के लिए , हमें FirstX >= ? – 4200000

इसलिए हम क्वेरी में एक शर्त इस प्रकार जोड़ सकते हैं:

SELECT P, Y, Z FROM SomeTable WHERE FirstX <= ? AND FirstX >= ? - 4200000 AND LastX >= ? LIMIT 10;

उदाहरण में मैंने प्रश्न में परीक्षण किया, संसाधित की गई अनुक्रमणिका प्रविष्टियों की संख्या 2104820 . से घटा दी गई थी करने के लिए 18 और चलने का समय 0.563 सेकंड . से कम कर दिया गया था करने के लिए 0.0003 सेकंड

मैंने उसी 120000 . के साथ नई क्वेरी का परीक्षण किया X . के मान . आउटपुट पुरानी क्वेरी के समान था। समय कम हो गया 10 घंटे . से अधिक से 5.5 मिनट , जो 100 गुना तेज . से अधिक है ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में अंतिम हटाई गई आईडी प्राप्त करें

  2. PHP + MySql + संग्रहीत कार्यविधियाँ, मैं एक आउट वैल्यू कैसे प्राप्त कर सकता हूँ?

  3. प्राथमिक कुंजी SQL ट्यूटोरियल - डेटाबेस में प्राथमिक कुंजी को कैसे परिभाषित करें

  4. MySQL सर्वर का थ्रेड_स्टैक पैरामीटर - यह क्या है? यह कितना बड़ा होना चाहिए?

  5. हाइबरनेट पीढ़ी सूचकांक और MySQL के लिए एक ही नाम के साथ विदेशी कुंजी