2009-04-20 7 views
12

मैं हाल ही में अपने पोस्टग्रेस डेटाबेस को अनुकूलित करने पर काम कर रहा हूं, और पारंपरिक रूप से, मैंने कभी भी बी-ट्री इंडेक्स का उपयोग किया है। हालांकि, मैंने देखा कि पोस्टस्ट्रेस 8.3 दस्तावेज में जीआईएसटी इंडेक्स गैर-अद्वितीय, बहुआयामी सूचकांक suport।बी-ट्री और जीआईएसटी इंडेक्स विधियों (पोस्टग्रेएसक्यूएल में) के बीच क्या अंतर है?

हालांकि, मैं देख सकता था कि उनके बीच वास्तविक अंतर क्या है। मैं उम्मीद कर रहा था कि मेरे साथी कोडर समझाने में सक्षम हो सकते हैं, उनके बीच पेशेवर और विपक्ष क्या हैं, और सबसे महत्वपूर्ण बात यह है कि मैं एक दूसरे के ऊपर क्यों उपयोग करूंगा?

उत्तर

18

संक्षेप में: बी-ट्री इंडेक्स बेहतर प्रदर्शन करते हैं, लेकिन जीआईएसटी इंडेक्स अधिक लचीला होते हैं। आमतौर पर, यदि आप अपने डेटा प्रकार के लिए काम करेंगे तो आप बी-ट्री इंडेक्स चाहते हैं। जीआईएसटी इंडेक्स का उपयोग करने के लिए एक विशाल प्रदर्शन हिट के बारे में पीजी सूचियों पर एक हालिया पोस्ट थी; वे बी-पेड़ (जैसे लचीलापन की कीमत) से धीमे होने की उम्मीद है, लेकिन नहीं बहुत धीमी है ... काम है, जैसा कि आप उम्मीद कर सकते हैं, चल रहा है।

a post by Tom Lane से, एक कोर PostgreSQL डेवलपर:

GIST का मुख्य बिंदु सूचकांक प्रश्नों कि बस BTREE में इंडेक्स करने योग्य नहीं हैं करने के लिए सक्षम होने के लिए है। ... एक पूरी तरह से btree-indexable मामलों के लिए जीआईएसटी को हरा करने की उम्मीद है। मुझे लगता है कि यहां महत्वपूर्ण बिंदु यह है कि यह सौ के एक कारक द्वारा जीत रहा है; यह बहुत भयानक है, और कुछ कार्यान्वयन समस्या को इंगित कर सकता है।

3

सार अनुक्रमित एक हद तक हानिपूर्ण कर रहे हैं, जिसका अर्थ है कि डीबीएमएस झूठे सकारात्मक/नकारात्मक से निपटने के लिए, यानी है:

सार अनुक्रमित हानिपूर्ण क्योंकि प्रत्येक दस्तावेज़ एक फिक्स्ड से सूचकांक में प्रतिनिधित्व किया है कर रहे हैं लंबाई हस्ताक्षर। हस्ताक्षर प्रत्येक शब्द को में 0 -के साथ यादृच्छिक बिट में इन सभी बिट्स को पर एक-बिट दस्तावेज़ हस्ताक्षर उत्पन्न करने के द्वारा उत्पन्न किया गया है। जब दो शब्द हैश स्थिति पर एक झूठा मैच होगा। यदि क्वेरी में सभी शब्द (वास्तविक या गलत) से मेल खाते हैं तो तालिका को यह देखने के लिए पुनर्प्राप्त किया जाना चाहिए कि मैच सही है या नहीं। बी-पेड़ में यह व्यवहार नहीं है, इसलिए अनुक्रमित डेटा के आधार पर, दोनों के बीच कुछ प्रदर्शन अंतर हो सकता है।

पाठ खोज व्यवहार http://www.postgresql.org/docs/8.3/static/textsearch-indexes.html और http://www.postgresql.org/docs/8.3/static/indexes-types.html एक सामान्य प्रयोजन तुलना के लिए के लिए देखें।

+0

यह उद्धरण कहां से है? मुझे विश्वास नहीं है कि जीआईएसटी स्वाभाविक रूप से हानिकारक है, इसलिए मुझे लगता है कि यह एक विशिष्ट प्रकार के लिए है, शायद पाठ के लिए। – beldaz

+0

यह 1 लिंक में 8.3 डॉक अनुभाग से है (दूसरी क्वेरी योजना के नीचे)। यह 9.5 के लिए इसी खंड में भी दिखाई देता है। –

+0

ऐसा सोचा। यह पाठ खोज कार्यान्वयन के लिए विशिष्ट है। जीआईएसटी सूचकांक कार्यान्वयन को हानिकारक होने की इजाजत देता है, लेकिन उन्हें होना जरूरी नहीं है। – beldaz

2

जीआईएसटी अधिक सामान्य सूचकांक हैं। आप उन्हें व्यापक उद्देश्यों के लिए उपयोग कर सकते हैं जिन्हें आप बी-ट्री के साथ उपयोग करेंगे। जीआईएसटी का उपयोग कर बी-ट्री बनाने की क्षमता सहित।

आईई: आप भौगोलिक बिंदुओं, या भौगोलिक क्षेत्रों पर सूचकांक के लिए जीआईएसटी का उपयोग कर सकते हैं, कुछ ऐसा जो आप बी-ट्री इंडेक्स के साथ नहीं कर पाएंगे, क्योंकि बी-ट्री पर एकमात्र चीज महत्वपूर्ण है (या चाबियाँ) आप अनुक्रमणित कर रहे हैं।

+1

क्या आप भौगोलिक बिंदुओं, या भौगोलिक क्षेत्रों के लिए जीआईएसटी बेहतर काम करता है, इस बारे में अधिक विस्तार से समझा सकते हैं - क्योंकि यह बहुत कुछ है जो मैं इंडेक्स का उपयोग कर रहा हूं। – Ash

5

मूल रूप से सभी का अधिकार - btree डिफ़ॉल्ट अनुक्रमणिका है क्योंकि यह बहुत अच्छा प्रदर्शन करता है। जीआईएसटी कुछ अलग जानवर हैं - यह इंडेक्स प्रकार की तुलना में "इंडेक्स प्रकार लिखने के लिए ढांचा" है। इसका उपयोग करने के लिए आपको कस्टम कोड (सर्वर में) जोड़ना होगा, लेकिन दूसरी तरफ - वे बहुत लचीले हैं।

आम तौर पर - आप जीआईएसटी का उपयोग नहीं करते हैं जब तक कि आप जिस डेटाटाइप का उपयोग कर रहे हैं, वह आपको ऐसा करने के लिए कहता है। डेटास्टीप्स का उदाहरण जो जीएसटीटी का उपयोग करते हैं: ltree (contrib से), tsvector (contrib/tsearch 8.2 तक, 8.3 से मूल में), और अन्य।

पोस्टग्रेएसक्यूएल - पोस्टजीआईएस (http://postgis.refractions.net/) के लिए अच्छी तरह से जाना जाता है, और बहुत तेज़ भौगोलिक विस्तार है जो इसके उद्देश्यों के लिए जीआईएसटी का उपयोग करता है।

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