2013-02-23 95 views
6

क्या एक समग्र प्रकार के एक निश्चित क्षेत्र पर एक सूचकांक संभव है? मान लें, उदाहरण के लिए, मैं एक प्रकारPostgreSQL: एक समग्र प्रकार के भीतर फ़ील्ड के लिए एक अनुक्रमणिका बनाएँ?

CREATE TYPE complex AS (
    r  double precision, 
    i  double precision 
); 

बना सकते हैं और r और i के ऊपर एक के ऊपर एक (विशेष रूप से हैश/GIST/से जिन) सूचकांक करना चाहते हैं, यह संभव हो सकता है?

इसी तरह, क्या पहले, दूसरे, तीसरे, ... सरणी क्षेत्र का तत्व सूचकांक होना संभव है?

मान लें मैं complex[] उपयोग करते हैं, यह सब complex[1] से अधिक, सभी complex[0] से अधिक एक सूचकांक के लिए संभव हो सकता है, आदि

+1

उन्नत इंडेक्स उपयोग, [dba.SE] (http://dba.stackexchange.com/) पर माइग्रेशन के लिए उम्मीदवार हो सकता है। –

उत्तर

17

हाँ, पूरी तरह से संभव होगा। index on an expression का उपयोग करें। मुश्किल हिस्सा syntax for composite types है।

जटिल प्रकार का एक तत्व पर बी-वृक्ष सूचकांक:

CREATE TABLE tbl (tbl_id serial, co complex); 

CREATE INDEX tbl_co_r_idx ON tbl (((co).r)); -- note the parentheses! 

EXPLAIN ANALYZE साथ SQL Fiddle
यही बात एक सरणी के तत्वों के लिए काम करता है, यहां तक ​​कि समग्र प्रकार की एक सरणी के लिए:

CREATE TABLE tbl2 (tbl2_id serial, co complex[]); 

CREATE INDEX tbl2_co1_idx ON tbl2 ((co[1])); -- note the parentheses! 

ध्यान दें कि अभिव्यक्ति सूचकांक केवल प्रश्नों के लिए इस्तेमाल किया जा सकता है, तो अभिव्यक्ति कम या ज्यादा सचमुच मिलान किया जाता है।

लेकिन यह आपके द्वारा उल्लेख किए गए जीआईएन इंडेक्स के साथ समझ में नहीं आता है। Per documentation:

जीआईएन सामान्यीकृत उलटा इंडेक्स है। जीआईएन उन मामलों को संभालने के लिए डिज़ाइन किया गया है जहां आइटमों को अनुक्रमित किया जाना समग्र मान हैं, और इंडेक्स द्वारा संभाले जाने वाले प्रश्नों को समग्र वस्तुओं के भीतर दिखाई देने वाले तत्व मानों की खोज करने की आवश्यकता है।

एक जिन सूचकांक एक पूरी के रूप में जटिल प्रकार की एक सरणी पर समझ बनाने हैं, तो आप के अंदर एक तत्व की खोज करने देने। लेकिन आपको अपने विशेष प्रकार के लिए कार्यान्वयन की आवश्यकता है। यहां एक list of examples in standard Postgres है (सभी एक-आयामी सरणी के लिए मूल समर्थन के अतिरिक्त)।

+0

आपके बहुत विस्तृत और अच्छे उत्तर के लिए धन्यवाद! _GIN_ के संबंध में संकेत के लिए भी धन्यवाद, आप पूरी तरह से वहां हैं! – navige