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