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

MySQL क्वेरी ऑप्टिमाइज़ेशन LIKE टर्म% ORDER BY int

आपने एक और सवाल पूछा "एक इंडेक्स बनाना जो 40 मिलियन नामों के माध्यम से वाइल्डकार्ड खोज के लिए सबसे अच्छा है"। ठीक है, आपके पास 40 मिलियन रिकॉर्ड हैं।

अब निम्नलिखित सूत्र पर विचार करें:

x = COUNT(DISTINCT values in a column) / COUNT(values in a column)

एक कॉलम पर एक इंडेक्स उतना ही बेहतर होता है, जितना करीब x 1 है। यदि यह 1 है, तो सभी मान अलग हैं, कोई डुप्लिकेट नहीं हैं और इसलिए एक अनुक्रमणिका काफी तेज़ है।

अब आप 'जॉन%' ढूंढ रहे हैं। वह 4 अक्षर और एक खुला अंत है। कौन से अक्षर महत्वपूर्ण नहीं हैं, आपके DB को 26*26*26*26=456976 विशिष्ट मूल्यों से निपटना होगा। इसे उपरोक्त सूत्र और अपने 40 मिलियन रिकॉर्ड में रखें। आपको एक x मिलता है 0,0114244 में से।

मुझे नहीं पता कि फिर से दहलीज क्या है, लेकिन IIRC यह 0,1 या कुछ और है। तो, अगर आप x . हैं 0,1 से ऊपर है सूचकांक का उपयोग किया जाता है, यदि यह कम है, तो यह नहीं है।

ऐसा क्यों है? इंडेक्स का उपयोग करना चीजों को धीमा भी कर सकता है, क्योंकि आपके डीबी को इंडेक्स को देखना है, उस इंडेक्स में देखें कि आपकी भौतिक हार्ड ड्राइव पर कौन सी स्थिति उपयुक्त रिकॉर्ड है और फिर वह रिकॉर्ड प्राप्त करें। इसलिए, जब x 10% से कम होता है, तो केवल संपूर्ण तालिका स्कैन करना अधिक तेज़ होता है।

संक्षेप में:आपके जैसे केवल एक कमजोर सूचकांक के साथ 40 मिलियन रिकॉर्ड को फ़िल्टर करना बेकार है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डुप्लिकेट कुंजी पर PHP + MYSQL अभी भी INDEX KEY को बढ़ाता है

  2. बड़ी मात्रा में डेटा (लॉगिंग) के लिए क्या MySQL इंजन?

  3. MySQL में, इस क्वेरी को तेज़ करने के लिए इंडेक्स कैसे बनाया जाए?

  4. MySQL पुराने पासवर्ड से नए पासवर्ड सिस्टम में अपग्रेड कैसे करें

  5. php . के साथ अल्पविराम से अलग mySql डेटाबेस फ़ील्ड मान को अलग करें