पोस्टग्रेज में टेबल इनहेरिटेंस का उपयोग करने के कुछ प्रमुख कारण हैं।
मान लें, हमारे पास आँकड़ों के लिए आवश्यक कुछ तालिकाएँ हैं, जो हर महीने बनाई और भरी जाती हैं:
statistics
- statistics_2010_04 (inherits statistics)
- statistics_2010_05 (inherits statistics)
इस नमूने में, हमारे पास प्रत्येक तालिका में 2.000.000 पंक्तियाँ हैं। प्रत्येक तालिका में यह सुनिश्चित करने के लिए एक CHECK बाधा है कि केवल मिलान करने वाले महीने का डेटा ही उसमें संग्रहीत हो।
तो क्या विरासत को एक अच्छी विशेषता बनाता है - डेटा को विभाजित करना अच्छा क्यों है?
- प्रदर्शन:डेटा का चयन करते समय, हम उन आंकड़ों से * का चयन करते हैं जहां x और Y के बीच की तारीख होती है, और Postgres केवल तालिकाओं का उपयोग करता है, जहां यह समझ में आता है। उदा. चुनें * आंकड़ों से जहां '2010-04-01' और '2010-04-15' के बीच की तारीख केवल तालिका के आंकड़ों को स्कैन करती है_2010_04, अन्य सभी तालिकाओं को स्पर्श नहीं किया जाएगा - तेज़!
- सूचकांक आकार:हमारे पास स्तंभ तिथि पर एक बड़े वसा सूचकांक के साथ कोई बड़ी वसा तालिका नहीं है। हमारे पास प्रति माह छोटी टेबल हैं, छोटे इंडेक्स के साथ - तेजी से पढ़ता है।
- रखरखाव:हम अन्य सभी डेटा को लॉक किए बिना प्रत्येक माह तालिका पर वैक्यूम पूर्ण, रीइंडेक्स, क्लस्टर चला सकते हैं
प्रदर्शन बूस्टर के रूप में तालिका वंशानुक्रम के सही उपयोग के लिए, postgresql मैन्युअल देखें। डेटाबेस को यह बताने के लिए आपको प्रत्येक तालिका पर CHECK बाधाओं को सेट करने की आवश्यकता है, जिस पर आपका डेटा विभाजित (विभाजित) हो जाता है।
मैं टेबल विरासत का भारी उपयोग करता हूं, खासकर जब महीने के आधार पर समूहित लॉग डेटा स्टोर करने की बात आती है। संकेत:यदि आप डेटा संग्रहीत करते हैं, जो कभी नहीं बदलेगा (डेटा लॉग करें), क्रिएट इंडेक्स ऑन () के साथ (फिलफैक्टर =100) बनाएं या इंडेक्स करें; इसका मतलब है कि इंडेक्स में अपडेट के लिए कोई जगह आरक्षित नहीं होगी - डिस्क पर इंडेक्स छोटा होता है।
अद्यतन:http://www.postgresql.org/docs/9.1/static/sql-createtable.html:
से भरने वाला डिफ़ॉल्ट 100 हैएक टेबल के लिए फिलफैक्टर 10 और 100 के बीच का प्रतिशत है। 100 (पूर्ण पैकिंग) डिफ़ॉल्ट है