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

MySQL अनुक्रमणिका - इस तालिका और प्रश्नों के अनुसार सर्वोत्तम अभ्यास क्या हैं

यह प्रश्न:

SELECT *
FROM listings
WHERE (publishedon BETWEEN 1441105258 AND 1443614458) AND
      (published = 1) AND
      (cat_id in (1,2,3,4,5)) AND
      (source_id in (1,2,3,4,5));

केवल अनुक्रमणिका के साथ अनुकूलित करना कठिन है। सबसे अच्छी अनुक्रमणिका वह है जो published . से शुरू होती है और उसके बाद अन्य कॉलम हैं -- यह स्पष्ट नहीं है कि उनका क्रम क्या होना चाहिए। इसका कारण यह है कि published को छोड़कर सभी = का उपयोग नहीं कर रहे हैं ।

चूंकि आपकी प्रदर्शन समस्या एक प्रकार की है, जो बताती है कि बहुत सारी पंक्तियां वापस की जा रही हैं। आमतौर पर, एक इंडेक्स का उपयोग WHERE . को संतुष्ट करने के लिए किया जाता है इंडेक्स से पहले क्लॉज ORDER BY . के लिए इस्तेमाल किया जा सकता है . इससे इसे अनुकूलित करना कठिन हो जाता है।

सुझाव। . . कोई भी महान नहीं है:

  • यदि आप महीने के हिसाब से डेटा एक्सेस करने जा रहे हैं, तो आप महीने के हिसाब से डेटा को विभाजित करने पर विचार कर सकते हैं। यह ORDER BY . के बिना क्वेरी बना देगा तेज़, लेकिन ORDER BY . में सहायता नहीं करेगा ।
  • published के बाद कॉलम के विभिन्न क्रमों को आजमाएं सूचकांक में। आपको सबसे चुनिंदा कॉलम मिल सकते हैं। लेकिन, एक बार फिर, यह छँटाई से पहले क्वेरी को गति देता है।
  • उन तरीकों के बारे में सोचें जिनसे आप WHERE में अधिक समानता की स्थिति के लिए क्वेरी की संरचना कर सकते हैं खंड या डेटा का एक छोटा सेट वापस करने के लिए।
  • (वास्तव में अनुशंसित नहीं) published पर एक अनुक्रमणिका लगाएं और ऑर्डरिंग कॉलम। फिर डेटा लाने के लिए एक सबक्वायरी का उपयोग करें। असमानता की शर्तें रखें (IN और इसी तरह) बाहरी क्वेरी में। सबक्वेरी अनुक्रमण के लिए छँटाई के लिए उपयोग करेगी और फिर परिणामों को फ़िल्टर करेगी।

अंतिम अनुशंसित नहीं होने का कारण यह है कि SQL (और MySQL) एक सबक्वेरी से परिणामों के क्रम की गारंटी नहीं देता है। हालाँकि, क्योंकि MySQL उपश्रेणियों को अमल में लाता है, परिणाम वास्तव में क्रम में हैं। मुझे अनिर्दिष्ट दुष्प्रभावों का उपयोग करना पसंद नहीं है, जो एक संस्करण से दूसरे संस्करण में बदल सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python MySQL पैरामीटरयुक्त क्वेरी LIKE कथन में % वाइल्डकार्ड के साथ विरोध करती है

  2. SQL में अलग-अलग पंक्तियों को फ़िल्टर करना

  3. MySQL में तारीखों के बीच महीनों का अंतर

  4. MySQL में टेबल का नाम कैसे बदलें

  5. MySQL तेजी से 600K पंक्तियों में से 10 यादृच्छिक पंक्तियों का चयन करें