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

लाइक और वाइल्डकार्ड का उपयोग करके MySQL खोज का अनुकूलन

आपके तार कितने लंबे हैं?

यदि वे अपेक्षाकृत कम हैं (उदाहरण के लिए अंग्रेजी शब्द; avg_len=5) और आपके पास अतिरिक्त डेटाबेस संग्रहण है, तो इस दृष्टिकोण को आजमाएं:

  • प्रत्येक शब्द के लिए जिसे आप तालिका में संग्रहीत करना चाहते हैं, इसके बजाय उस शब्द का हर संभव प्रत्यय लें। दूसरे शब्दों में, आप पहले चरित्र को तब तक अलग करते रहते हैं जब तक कि कुछ भी नहीं बचा। उदाहरण के लिए, शब्द value देता है:
    • value
    • alue
    • lue
    • ue
    • e
  • स्टोर प्रत्येक डेटाबेस में इन प्रत्ययों में से।
  • अब आप LIKE 'alu%' . का उपयोग करके सबस्ट्रिंग खोज सकते हैं (जो 'अलु' को 'मान' के हिस्से के रूप में खोजेगा)।

सभी प्रत्ययों को संग्रहीत करके, आपने संग्रहण स्थान की कीमत पर अग्रणी वाइल्डकार्ड (तेजी से देखने के लिए अनुक्रमणिका का उपयोग करने की अनुमति) की आवश्यकता को हटा दिया है।

भंडारण लागत

किसी शब्द को संग्रहीत करने के लिए आवश्यक वर्णों की संख्या हो जाती है word_len*word_len / 2 , यानी शब्द की लंबाई में द्विघात, प्रति शब्द के आधार पर। यहाँ विभिन्न शब्द आकारों के लिए वृद्धि का कारक है:

  • 3-अक्षर वाला शब्द:(3*3/2) / 3 = 1.5
  • 5 अक्षर का शब्द:(5*5/2) / 5 = 2.5
  • 7-अक्षर वाला शब्द:(7*7/2) / 7 = 3.5
  • 12-अक्षर का शब्द:(12*12/2) / 12 = 6

किसी शब्द को संग्रहीत करने के लिए आवश्यक पंक्तियों की संख्या 1 से बढ़कर word_len . हो जाती है . इस ओवरहेड से सावधान रहें। बड़ी मात्रा में अनावश्यक डेटा संग्रहीत करने से बचने के लिए अतिरिक्त कॉलम को न्यूनतम रखा जाना चाहिए। उदाहरण के लिए, एक पृष्ठ संख्या जिस पर शब्द मूल रूप से पाया गया था, ठीक होना चाहिए (अहस्ताक्षरित छोटे से सोचें), लेकिन शब्द पर व्यापक मेटाडेटा को प्रत्येक प्रत्यय के बजाय प्रति-शब्द के आधार पर एक अलग तालिका में संग्रहीत किया जाना चाहिए।

विचारों

जहां हम 'शब्दों' (या टुकड़े) को विभाजित करते हैं, वहां एक व्यापार-बंद होता है। वास्तविक दुनिया के उदाहरण के रूप में:हम हाइफ़न के साथ क्या करते हैं? क्या हम विशेषण five-letter . को स्टोर करते हैं? एक या दो शब्द के रूप में?

व्यापार बंद इस प्रकार है:

  • जो कुछ भी टूटा हुआ है उसे एक तत्व के रूप में नहीं पाया जा सकता है। अगर हम five स्टोर करते हैं और letter अलग से, five-letter के लिए खोज रहे हैं या fiveletter विफल हो जाएगा।
  • कुछ भी नहीं टूटा हुआ अधिक संग्रहण स्थान लेगा। याद रखें, भंडारण की आवश्यकता शब्द की लंबाई में द्विघात रूप से बढ़ जाती है।

सुविधा के लिए, हो सकता है कि आप हाइफ़न को हटाना चाहें और fiveletter को संग्रहित करना चाहें . शब्द अब five . खोज कर पाया जा सकता है , letter , और fiveletter . (यदि आप किसी खोज क्वेरी से हाइफ़न भी हटाते हैं, तो उपयोगकर्ता अभी भी सफलतापूर्वक five-letter ढूंढ सकते हैं ।)

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक प्रश्नों के लिए PDO समर्थन (PDO_MYSQL, PDO_MYSQLND)

  2. क्या मैं इसे शुद्ध MySQL के साथ हल कर सकता हूं? ('' कॉलम में अलग किए गए मानों से जुड़ना)

  3. MySQL में DATETIME को DATE के रूप में कैसे डाला जाए?

  4. MySQL में दो तालिकाओं से कैसे चयन करें, भले ही एक तालिका की सभी पंक्तियों में दूसरे में संवाददाता न हों?

  5. डेटाबेस में mysqldb के माध्यम से पांडा डेटाफ़्रेम कैसे सम्मिलित करें?