2011-05-18 19 views
6

मुझे फ़ील्ड 1 और फ़ील्ड 2 कहकर दो फ़ील्ड (अद्वितीय इंडेक्स) द्वारा संग्रह को सूचीबद्ध करने की आवश्यकता है। क्या प्रदर्शन के मामले में बेहतर तरीका है:मोंगोडीबी: दो फ़ील्ड इंडेक्स बनाम दस्तावेज़ फ़ील्ड इंडेक्स

  1. एक नियमित रूप से दो-स्तंभ सूचकांक

    -या बनाएँ -

  2. एक एकल दस्तावेज़ क्षेत्र में उन दो क्षेत्रों कम्बाइन {फ़ील्ड 1: मूल्य, field2: value2} और उस क्षेत्र में सूचकांक?

नोट: मैं हमेशा एक साथ उन दो क्षेत्रों से क्वेरी करने हो जाएगा।

उत्तर

3

आप कॉलम को अलग रख सकते हैं और एक एकल इंडेक्स बना सकते हैं जो दोनों क्षेत्रों को एक साथ पूछताछ करते समय प्रदर्शन को बढ़ाएगा।

db.things.ensureIndex({field1:1, field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes

ही स्तंभ में कॉलम के बाद कोई प्रदर्शन बढ़ जाती है प्रदान करता है, क्योंकि आप उन्हें सूचकांक उसी तरह करना होगा:

db.things.ensureIndex({fields.field1:1, fields.field2:1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-EmbeddedKeys

या आप कर सकते हैं सूचकांक पूरा दस्तावेज़

db.things.ensureIndex({fields: 1}); 

http://www.mongodb.org/display/DOCS/Indexes#Indexes-DocumentsasKeys

एक संभव प्रदर्शन वृद्धि हो सकती है, लेकिन doubtfully बहुत ज्यादा। परीक्षण डेटाबेस का प्रयोग करें, परीक्षण डेटा बनाएं और इसे समझने के लिए कुछ परीक्षणों को बेंचमार्क करें। हम आपके परिणाम सुनना पसंद करेंगे।

1

मैं दोनों क्षेत्रों में एक कंपाउंड इंडेक्स तैयार करूंगा। यह कम डिस्क स्थान लेगा क्योंकि आपको अतिरिक्त संयुक्त क्षेत्र को स्टोर करने की आवश्यकता नहीं होगी, और आपको पहले फ़ील्ड पर अतिरिक्त इंडेक्स का बोनस देना होगा, यानी { a:1, b:1 } पर एक इंडेक्स { a:1 } से अधिक सूचकांक भी है।

+0

ठीक है, चाहे मैं उन दोनों क्षेत्रों को एक साथ या अलग-अलग क्षेत्रों में संग्रहीत करूँगा, वही स्थान उपभोग करेंगे। साथ ही, मैं हमेशा दोनों क्षेत्रों को एक साथ पूछताछ करता हूं, इसलिए आपके द्वारा सूचीबद्ध दूसरा लाभ वहां भी लागू नहीं होता है। मैं क्वेरी प्रदर्शन के बारे में उत्सुक हूँ। कोई विचार? – Andrey

+0

यदि आप फ़ील्ड को गठबंधन करते हैं तो यह थोड़ा कम स्थान का उपयोग करेगा क्योंकि आपको दोनों फ़ील्ड नामों को स्टोर करने की आवश्यकता नहीं होगी। क्वेरी प्रदर्शन के संदर्भ में, मुझे नहीं लगता कि वहां बहुत अंतर आएगा, सबसे अच्छी बात यह है कि इसे आज़माएं, मोंगोडीबी की कुछ अच्छी अंतर्निहित प्रोफाइलिंग विशेषताएं हैं: http://www.mongodb.org/display/docs/डाटाबेस + प्रोफाइलर –

संबंधित मुद्दे