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

खोजे जाने वाले कई क्षेत्रों वाली तालिका को ठीक से अनुक्रमित करने के लिए सलाह की आवश्यकता है

मेरे पास काम पर एक ही तरह की चीज़, बहुत सारे कॉलम और चुनने के 1000 अलग-अलग तरीकों के साथ एक टेबल है। यह एक दुःस्वप्न है। हालांकि, मैंने पाया कि फिल्टर के कुछ संयोजन हैं जो अक्सर उपयोग किए जाते हैं। यह वे हैं जिनके लिए मैं इंडेक्स बनाउंगा और दूसरों को छोड़ दूंगा जिन्हें शायद ही कभी धीरे-धीरे चलाने के लिए उपयोग किया जाता है। एमएसएसक्यूएल में, मैं डेटाबेस के खिलाफ चलाए गए सबसे महंगे प्रश्नों को दिखाने के लिए एक क्वेरी चला सकता हूं, MySQL में एक समान चीज़ होनी चाहिए। एक बार मेरे पास हो जाने के बाद, मैं एक इंडेक्स बनाता हूं जो कॉलम को गति देने के लिए कवर करता है। आखिरकार, आपके पास इसे 90 प्रतिशत कवर कर दिया जाएगा। मैं व्यक्तिगत रूप से उस तरह की तालिका को फिर कभी डिजाइन नहीं करूंगा जब तक कि मेरे पास एके 47 की ओर इशारा न हो। (मेरी अनुक्रमणिका तालिका में डेटा की तुलना में 3 गुना बड़ी है जो बहुत ही बेकार है यदि आपको एक गुच्छा या रिकॉर्ड जोड़ने की आवश्यकता है)। मुझे यकीन नहीं है कि मैं तालिका को फिर से कैसे डिजाइन करूंगा, मेरा पहला विचार तालिका को दो में विभाजित करना होगा , लेकिन यह कहीं और सिरदर्द जोड़ देगा।

उपयोगकर्ता तालिका (उपयोगकर्ता आईडी, नाम)

1, Lisa
2, Jane
3, John

उपयोगकर्ता विशेषता तालिका (उपयोगकर्ता आईडी, विशेषता नाम, विशेषता मान)

1, EYES, Brown
1, GENDER, Female
2, EYES, Blue
2, GENDER, Female
3  EYES, Blue
3, GENDER, Male

यह विशेषताओं की पहचान को तेज़ कर देगा, लेकिन आपके प्रश्नों को लिखने के लिए उतना आसान नहीं बना देगा।

SELECT UserID, COUNT(*) as MatchingAttributes
FROM   UserAttributes 
WHERE  (UserAttributes.AttributeName = 'EYES' AND UserAttributes.AttributeValue = 'Blue') OR
       (UserAttributes.AttributeName = 'GENDER' AND UserAttributes.AttributeValue = 'Female') 

इसे निम्नलिखित वापस करना चाहिए

UserID, MatchingAttributes
1, 1
2, 2
3, 1

इसके बाद आपको केवल मिलान करने वाली आईडी का चयन करने के लिए क्वेरी में एक HAVING COUNT(*) =2 जोड़ना होगा। इसका चयन करने के लिए थोड़ा अधिक शामिल है, लेकिन यह एक साफ सुथरी सुविधा भी देता है, मान लीजिए कि आप 10 विशेषताओं पर फ़िल्टर करते हैं, और उन सभी को वापस कर देते हैं जिनमें 10 मिलान होते हैं। बढ़िया, लेकिन कहें कि कोई भी 100% मेल नहीं खाता। आप कह सकते हैं अरे, मुझे ऐसा कोई नहीं मिला जो मेल खाता हो, लेकिन इनका 10 में से 9 या 90% मैच था। (बस सुनिश्चित करें, अगर मैं नीली आंखों वाली गोरी महिला की खोज करता हूं, तो मुझे यह कहते हुए एक संदेश नहीं मिलता है कि कोई भी नहीं मिला है, लेकिन यहां अगले निकटतम मेल खाने वाले हैं जिनमें नीली आंखों वाले ब्लोंड हैं जिनका मिलान स्कोर 60% है। बहुत शांत रहो)

यदि आप तालिका को विभाजित करना चुनते हैं तो और भी चीजें हैं जिन पर विचार करने की आवश्यकता होगी, जैसे कि आप एक कॉलम में संख्याओं, तिथियों और टेक्स्ट के रूप में विशेषताओं को कैसे स्टोर करते हैं? या ये अलग टेबल, या कॉलम हैं। कोई आसान उत्तर किसी भी तरह से चौड़ी टेबल या स्प्लिट टेबल नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. codeigniter IS NULL को find_in_set में जोड़ रहा है

  2. ड्रॉप डाउन मेन्यू कैसे बनाएं

  3. डेटाबेस से डेटा कैसे प्राप्त करें और PHP पेज पर गूंजें?

  4. PHP:MySQL संग्रहीत प्रक्रिया को इनपुट और आउटपुट दोनों पैरामीटर के साथ कॉल करना (इनआउट नहीं)

  5. MySQL में प्राथमिक कुंजी को अनदेखा करते हुए डुप्लिकेट पंक्तियों को खोजने के 7 तरीके