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

आपसी मित्रों के लिए MySQL क्वेरी

ठीक है, एकमात्र प्रश्न जो अब तक काम कर सकता है वह साइमन है ... लेकिन यह वास्तविक ओवरकिल है - इतनी जटिल ग़लत क्वेरी (2 यूनियनों के साथ 2 उपश्रेणियां!) इतनी सरल चीज़ के लिए कि आपको एक इनाम रखने की आवश्यकता है? :-) और अगर आपके पास 1000+ उपयोगकर्ता हैं तो क्वेरी नरक के रूप में धीमी होगी - याद रखें, यह द्विघात है, और सबक्वेरी में यूनियनों के कारण, शायद ही किसी इंडेक्स का उपयोग किया जाएगा!

मेरा सुझाव है कि डिज़ाइन पर फिर से विचार करें और दोस्ती के लिए 2 डुप्लिकेट पंक्तियों की अनुमति दें:

id  Person1    Person2  status
1         1          2  friend
2         2          1  friend
3         1          3  friend
4         3          1  friend

आप सोच सकते हैं कि यह अक्षम है, लेकिन सरलीकरण का पालन करने से क्वेरी को साधारण जॉइन में फिर से लिखने की अनुमति मिलेगी:

select f1.Person2 as common_friend
from friends as f1 join friends as f2
    using (Person2)
where f1.Person1 = '$id1' and f2.Person1 = '$id2' 
    and f1.status = 'friend' and f2.status = 'friend'

जो नर्क के समान तेज़ होगा! (व्यक्ति 1,2 के लिए सूचकांक जोड़ना न भूलें।) सबक्वायरी टू जॉइन) अन्य बहुत खराब डेटा संरचना में और इसने क्वेरी को गति दी है अनंत काल से ब्लिट्ज-तत्काल तक!

तो जो एक बड़ा ओवरहेड लग रहा था (एक दोस्ती के लिए 2 पंक्तियाँ) वास्तव में एक बड़ा अनुकूलन है :-)

साथ ही, यह "X के सभी दोस्तों को ढूंढें" जैसे प्रश्नों को और अधिक आसान बना देगा। और अधिक इनाम खर्च करने की आवश्यकता नहीं होगी :-)



  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 यूनिकोड शाब्दिक

  2. मैसकल को विशिष्ट तालिका की अंतिम आईडी मिलती है

  3. सप्ताह संख्या का उपयोग करके MySql में सप्ताह का पहला दिन प्राप्त करना

  4. mysql और php . का उपयोग करके कैस्केडिंग ड्रॉप-डाउन सूचियां कैसे बनाएं?

  5. मैं MySQL को पुनरारंभ किए बिना MySQL की धीमी क्वेरी लॉग को कैसे सक्षम कर सकता हूं?