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

WHERE के साथ साझा की गई गणना पर MySQL ORDER BY को ऑप्टिमाइज़ करना

नहीं, गणना दो बार नहीं की जाएगी यदि इसे ठीक उसी तरह लिखा गया हो। हालाँकि यदि आपका उद्देश्य अपने आवेदन के प्रदर्शन में सुधार करना है तो आप इस मामूली विवरण पर ध्यान केंद्रित करने के बजाय बड़ी तस्वीर देखना चाहेंगे जो आपको दो अंतर का कारक दे सकता है। एक अधिक गंभीर समस्या यह है कि आपकी क्वेरी अनुक्रमणिका के कुशल उपयोग को रोकती है और इसका परिणाम पूर्ण स्कैन में होगा।

मेरा सुझाव है कि आप अपना डेटाबेस बदलें ताकि आप ज्यामिति के प्रकार का उपयोग करें और एक स्थानिक अनुक्रमणिका आपके डेटा पर। फिर आप MBRWithin अपने सर्कल के बाउंडिंग बॉक्स के अंदर स्थित बिंदुओं को जल्दी से खोजने के लिए। एक बार जब आप उन बिंदुओं को पा लेते हैं, तो आप केवल उन्हीं बिंदुओं पर अपनी अधिक महंगी दूरी की परीक्षा चला सकते हैं। यदि आपकी तालिका बड़ी है और एक सामान्य खोज पंक्तियों का केवल एक छोटा अंश लौटाती है तो यह दृष्टिकोण काफी तेज़ होगा।

यदि आप डेटा मॉडल को नहीं बदल सकते हैं, तब भी आप पहले बाउंडिंग बॉक्स चेक का उपयोग करके प्रदर्शन में सुधार कर सकते हैं, उदाहरण के लिए WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . बाउंडिंग बॉक्स चेक एक इंडेक्स का उपयोग करने में सक्षम होगा, लेकिन क्योंकि आर-ट्री इंडेक्स केवल ज्यामिति प्रकार पर समर्थित हैं, आपको मानक बी-ट्री इंडेक्स का उपयोग करना होगा जो इस प्रकार की क्वेरी के लिए उतना कुशल नहीं है (लेकिन अभी भी बहुत कुछ आप वर्तमान में जो कर रहे हैं उससे बेहतर)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CSV फ़ाइल को सीधे MySQL में आयात करें

  2. लार्वेल के साथ चलाने के लिए MySQL 8 कैसे प्राप्त करें?

  3. विशेषाधिकार तालिकाएँ खोल और लॉक नहीं कर सकते:तालिका 'mysql.user' मौजूद नहीं है

  4. यदि mysql स्क्रिप्ट में स्थिति है

  5. Neo4j - Cypher . का उपयोग करके एक नोड बनाएं