मान लें कि हमारे पास 6 मिलियन रिकॉर्ड के साथ एक टेबल है। 16 पूर्णांक कॉलम और कुछ टेक्स्ट कॉलम हैं। यह केवल पढ़ने योग्य तालिका है इसलिए प्रत्येक पूर्णांक कॉलम में एक अनुक्रमणिका होती है। प्रत्येक रिकॉर्ड लगभग 50-60 बाइट्स है।पोस्टग्रेस्क्ल - बड़े डेटाबेस में सरणी का उपयोग करने का प्रदर्शन
तालिका का नाम "आइटम"
सर्वर है: 12 जीबी रैम, 1,5 टीबी सैटा, 4 कोर। पोस्टग्रेज़ के लिए सभी सर्वर।
इस डेटाबेस में कई और टेबल हैं इसलिए रैम सभी डेटाबेस को कवर नहीं करता है।
मैं तालिका "आइटम" में एक कॉलम "a_elements" (सरणी प्रकार के बड़े पूर्णांक) में जोड़ना चाहता हूं प्रत्येक रिकॉर्ड में इस कॉलम में 50-60 से अधिक तत्व नहीं होंगे।
उसके बाद मैं इस स्तंभ और विशिष्ट क्वेरी पर सूचकांक जिन बनाने इस तरह दिखना चाहिए होगा:
select * from item where ...... and '{5}' <@ a_elements;
मैं भी दूसरे, और अधिक शास्त्रीय, विकल्प होता है।
दो कॉलम के साथ तालिका आइटम करने के लिए स्तंभ a_elements जोड़ने मत लेकिन बनाने तालिका तत्वों:
- id_item
- id_element
इस तालिका में लगभग 200 मिलियन रिकॉर्ड होगा।
मैं इस टेबल पर विभाजन करने में सक्षम हूं इसलिए तालिका तत्वों में तालिका रिकॉर्ड में 500 मिलीलीटर और तालिका आइटम में 500 के लिए कम हो जाएगा।
दूसरा विकल्प क्वेरी इस तरह दिखता है:
select item.*
from item
left join elements on (item.id_item=elements.id_item)
where ....
and 5 = elements.id_element
मुझे आश्चर्य है कि क्या विकल्प देखने के प्रदर्शन बिंदु पर बेहतर होगा। क्या पोस्टर एक ही क्वेरी में इंडेक्स जीआईएन (विकल्प 1) के साथ कई अलग-अलग इंडेक्स का उपयोग करने में सक्षम है?
मुझे एक अच्छा निर्णय लेने की आवश्यकता है क्योंकि इस डेटा के आयात में मुझे 20 दिन लगेंगे।
हाय! और आपका अंतिम निर्णय क्या है? मेरे पास लगभग एक ही स्थिति है। –