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

प्रदर्शन के दृष्टिकोण से, अत्यधिक उपयोग की जाने वाली वेबसाइट सुविधा के लिए MySQL अस्थायी तालिका का उपयोग करना कितना कुशल है?

आपने जो कहा वह पूरी तरह से सही है, अस्थायी तालिका केवल वर्तमान उपयोगकर्ता/कनेक्शन के लिए दृश्यमान होगी। फिर भी, कुछ ओवरहेड और कुछ अन्य समस्याएं हैं जैसे:

  • हजारों खोजों में से प्रत्येक के लिए आप उस तालिका को बनाने और भरने जा रहे हैं (और बाद में इसे छोड़ दें) - प्रति उपयोगकर्ता नहीं, प्रति खोज। क्योंकि प्रत्येक खोज सबसे अधिक संभावना स्क्रिप्ट को फिर से निष्पादित करेगी, और "प्रति सत्र" का अर्थ PHP सत्र नहीं है - इसका अर्थ डेटाबेस सत्र (खुला कनेक्शन) है।
  • आपको अस्थायी तालिकाएं बनाएं की आवश्यकता होगी विशेषाधिकार, जिसे आप संभव नहीं है।
  • फिर भी, उस तालिका में वास्तव में MEMORY प्रकार होना चाहिए, जो आपकी RAM को जितना दिखता है उससे कहीं अधिक चुरा लेता है। क्योंकि VARCHAR होने के बावजूद, MEMORY टेबल निश्चित लंबाई वाली पंक्ति-भंडारण का उपयोग करते हैं।
  • यदि आपके अनुमानों को बाद में उस तालिका को दो बार संदर्भित करने की आवश्यकता है (जैसे ) - यह मेमोरी टेबल के साथ संभव नहीं है।

इसके बाद, आपके लिए - और डेटाबेस के लिए भी - LIKE '%xyz%' को जोड़ना आसान होगा सीधे आपके छवियों . पर टेबल कहां खंड। यह TEMP TABLE बनाने और उसमें शामिल होने के ऊपरी हिस्से के बिना भी ऐसा ही करेगा।

किसी भी मामले में - चाहे आप किसी भी रास्ते पर जाएं - कि WHERE बहुत धीमा होगा। भले ही आप images.name . पर एक इंडेक्स जोड़ते हैं सबसे अधिक संभावना है कि आपको LIKE '%xyz%' . की आवश्यकता होगी इसके बजाय LIKE 'xyz%' , ताकि अनुक्रमणिका का उपयोग न हो सके।

नहीं :)

वैकल्पिक विकल्प

MySQL में एक बिल्ड-इन Fulltext-Search (5.6 के बाद से भी InnoDB के लिए) जो आपको वह स्कोरिंग भी दे सकता है:मैं अत्यधिक इसे पढ़ने और कोशिश करने की सलाह देता हूं। आप सुनिश्चित हो सकते हैं कि डेटाबेस आपसे बेहतर जानता है कि उस खोज को कुशलतापूर्वक कैसे किया जाए।

यदि आप InnoDB के बजाय MyISAM का उपयोग करने जा रहे हैं, तो अक्सर अनदेखी की गई सीमा से अवगत रहें कि FULLTEXT खोज केवल तभी कुछ भी लौटाती है जब परिणामों की संख्या कुल तालिका पंक्तियों के 50% से कम हो।

अन्य चीजें जिन्हें आप देखना चाहते हैं, उदाहरण के लिए सोलर (उस विषय को पढ़ा गया अच्छा परिचय http://en.wikipedia.org/wiki/Apache_Solr ) हम इसे अपनी कंपनी में उपयोग कर रहे हैं और यह बहुत अच्छा काम करता है, लेकिन इसके लिए काफी कुछ सीखने की आवश्यकता है।

सारांश

आपकी वर्तमान समस्या का समाधान स्वयं (खोज) FULLTEXT क्षमताओं का उपयोग करना है।

आपको एक नंबर देने के लिए, प्रति सेकंड 10.000 कॉल पहले से ही "तुच्छ" नहीं है - प्रति सेकंड सैकड़ों हजारों खोजों के साथ आपके सेट-अप में हर जगह प्रदर्शन के मुद्दों का सामना करना पड़ेगा। आपको कुछ सर्वर, लोड संतुलन और अन्य अद्भुत तकनीकी बकवास की आवश्यकता होगी। और इनमें से एक उदाहरण के लिए सोलर होगा;)



  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 IN कंडीशन लिमिट

  2. मैं लंबी दूरी से संबंधित तालिकाओं के बीच संबंध कैसे ढूंढूं? माई एसक्यूएल

  3. JSON स्ट्रिंग के साथ फ़ील्ड खोजने के लिए MySQL क्वेरी

  4. क्या पेजिनेशन के लिए LIMIT OFFSET, LENGTH को ORDER BY की आवश्यकता है?

  5. अनुक्रमणिका के लिए क्या करें और क्या न करें