PostgreSQL प्रदर्शन और क्वेरी अनुकूलन · पाठ

Hash, GIN और GiST इंडेक्स

विशिष्ट डेटा प्रकारों और क्वेरी पैटर्न के लिए hash, GIN और GiST इंडेक्स के उपयोग के मामलों तथा लाभों को समझें।

पाठ 1, कुल 4 में से11 चरण

Hash, GIN और GiST इंडेक्स, CoddyKit पर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह PostgreSQL प्रदर्शन और क्वेरी अनुकूलन सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बी-ट्री की मूल बातों से आगे

आपने संभवतः बी-ट्री इंडेक्स देखे होंगे, जो एकल कॉलम पर सटीक मिलान और सीमा स्कैन के लिए उत्कृष्ट होते हैं। लेकिन अधिक जटिल डेटा प्रकारों या विशिष्ट क्वेरी पैटर्न के लिए क्या किया जाए?

PostgreSQL इन विशेष परिस्थितियों के लिए विशेष इंडेक्स प्रकार उपलब्ध कराता है। इनके द्वारा उन स्थानों पर भी कुशल क्वेरी करना संभव होता है जहाँ बी-ट्री पर्याप्त नहीं होते।

समानता के लिए हैश इंडेक्स

हैश इंडेक्स प्रत्येक इंडेक्स किए गए कॉलम के लिए एक हैश मान संग्रहीत करता है। इसे बहुत तेज़ समानता क्वेरी के लिए अनुकूलित किया गया है, जिनमें = ऑपरेटर का उपयोग होता है।

  • इसे शब्दकोश में खोजने जैसा समझिए: यदि आपको सटीक कुंजी पता हो, तो खोज बहुत तेज़ होती है।
  • बहुत बड़ी तालिकाओं पर सरल समानता जाँच के लिए, विशेषकर जब कई डुप्लिकेट हों, ये बी-ट्री से तेज़ हो सकते हैं।

हैश इंडेक्स की सीमाएँ

समानता के लिए तेज़ होने के बावजूद, हैश इंडेक्स की कुछ महत्वपूर्ण सीमाएँ हैं:

  • सीमा स्कैन नहीं: इनका उपयोग >, < या BETWEEN क्वेरी के लिए नहीं किया जा सकता।
  • क्रमबद्ध करना नहीं: ये डेटा को किसी विशेष क्रम में संग्रहीत नहीं करते, इसलिए ORDER BY खंडों में सहायता नहीं कर सकते।
  • क्रैश से सुरक्षा: ऐतिहासिक रूप से ये क्रैश-सुरक्षित नहीं थे। PostgreSQL के नए संस्करणों में सुधार हुआ है, फिर भी महत्वपूर्ण डेटा के लिए अपनी मजबूती के कारण बी-ट्री को सामान्यतः प्राथमिकता दी जाती है।

GIN इंडेक्स: सामान्य प्रतिलोम इंडेक्स

GIN का अर्थ General Inverted Index है। इसे ऐसे डेटा प्रकारों के लिए बनाया गया है जिनमें कई अलग-अलग मान होते हैं, जैसे ऐरे, JSONB दस्तावेज़ या पूर्ण-पाठ खोज के लेक्सेम।

इसे केवल फ़ील्ड को इंडेक्स करने के बजाय उसके अंतर्वस्तु को इंडेक्स करने जैसा समझिए। इससे @> जैसे ऑपरेटरों का उपयोग करके इन जटिल संरचनाओं के भीतर मौजूद तत्वों को बहुत तेज़ी से खोजा जा सकता है।

GIN उदाहरण: ऐरे डेटा

आइए देखें कि GIN इंडेक्स किसी ऐरे कॉलम की क्वेरी में कैसे सहायता करता है। हम एक तालिका बनाएँगे, उसमें कुछ डेटा डालेंगे, फिर GIN इंडेक्स जोड़कर उस पर क्वेरी चलाएँगे।

ध्यान दें कि किसी ऐरे में विशिष्ट तत्व मौजूद हैं या नहीं, यह जाँचने के लिए @> ऑपरेटर का उपयोग किया जाता है।

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  tags TEXT[]
);

INSERT INTO products (name, tags) VALUES
('Laptop', '{"electronics", "gadget"}'),
('Desk Chair', '{"furniture", "office"}'),
('Monitor', '{"electronics", "display", "office"}');

CREATE INDEX idx_products_tags ON products USING GIN (tags);

SELECT name FROM products WHERE tags @> '{"electronics"}';

GiST इंडेक्स: सामान्यीकृत खोज ट्री

GiST का अर्थ Generalized Search Tree है। यह एक अत्यंत लचीली इंडेक्स संरचना है, जो कई अलग-अलग प्रकार की क्वेरी संभाल सकती है, विशेषकर वे जिनमें गैर-मानक डेटा प्रकार या जटिल ऑपरेटर शामिल हों।

मुख्य उपयोग:

  • स्थानिक डेटा: जैसे किसी बहुभुज के भीतर मौजूद बिंदु या एक-दूसरे पर चढ़ी हुई वस्तुएँ खोजना।
  • सीमा प्रकार: जैसे एक-दूसरे पर चढ़ी हुई समय अवधियाँ या संख्यात्मक सीमाएँ खोजना।
  • पूर्ण-पाठ खोज: हालाँकि इसके लिए GIN अक्सर तेज़ होता है।

GiST उदाहरण: स्थानिक डेटा

यहाँ PostgreSQL के अंतर्निहित box प्रकार के साथ GiST का उपयोग करके किसी निश्चित आयताकार क्षेत्र के भीतर मौजूद वस्तुओं को खोजने का उदाहरण दिया गया है। हम "एक-दूसरे पर चढ़ना" दर्शाने के लिए && ऑपरेटर का उपयोग करते हैं।

CREATE TABLE locations (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  area BOX
);

INSERT INTO locations (name, area) VALUES
('Park A', '((0,0),(10,10))'),
('Building B', '((5,5),(15,15))'),
('River C', '((12,1),(18,8))');

CREATE INDEX idx_locations_area ON locations USING GiST (area);

SELECT name FROM locations WHERE area && '((7,7),(12,12))';

FTS के लिए GIN बनाम GiST

PostgreSQL में पूर्ण-पाठ खोज (FTS) के लिए GIN और GiST दोनों का उपयोग किया जा सकता है, लेकिन उनकी खूबियाँ अलग-अलग हैं:

  • GIN: जब बहुत-से आइटम खोज शब्द रखते हों, तब खोज के लिए सामान्यतः तेज़ होता है और आरंभिक निर्माण समय भी कम होता है।
  • GiST: डेटा बार-बार बदलता हो तो UPDATE के लिए तेज़ हो सकता है, क्योंकि GIN को अपडेट करना धीमा हो सकता है। GiST, FTS के लिए अधिक ऑपरेटरों का भी समर्थन करता है।

अधिकांश ऐसे FTS परिदृश्यों में जहाँ पढ़ने की क्रियाएँ अधिक होती हैं, GIN सबसे उपयुक्त विकल्प है।

सही इंडेक्स चुनना

आपकी सहायता के लिए यहाँ एक संक्षिप्त मार्गदर्शिका दी गई है:

  • बी-ट्री: डिफ़ॉल्ट और सामान्य उपयोग के लिए। समानता, सीमा और क्रमबद्ध करने के लिए अच्छा।
  • हैश: केवल सटीक समानता (=) के लिए; न सीमा का समर्थन, न क्रमबद्ध करने का। सीमाओं के कारण कम प्रचलित।
  • GIN: ऐरे, JSONB और पूर्ण-पाठ खोज जैसे "प्रतिलोम" डेटा के लिए। जटिल प्रकारों के भीतर मौजूद तत्वों को कुशलता से खोजता है।
  • GiST: अत्यंत लचीला; स्थानिक डेटा (बिंदु, बॉक्स), सीमा प्रकार और कभी-कभी पूर्ण-पाठ खोज के लिए। जटिल ऑपरेटरों के लिए अच्छा।

इंडेक्स प्रकार चुनौती

आपके पास events नाम की एक तालिका है, जिसमें tags JSONB कॉलम है। आप अक्सर @> ऑपरेटर का उपयोग करके ऐसे इवेंट खोजते हैं जिनमें विशिष्ट टैग मौजूद हों, जैसे WHERE tags @> '{"urgent"}'।

इस विशिष्ट क्वेरी पैटर्न के लिए कौन-सा इंडेक्स प्रकार सर्वोत्तम प्रदर्शन देगा?

पुनरावलोकन: विशेष इंडेक्स

बहुत अच्छा! आपने PostgreSQL के उन्नत इंडेक्स प्रकारों का अध्ययन किया है:

  • हैश इंडेक्स तेज़ समानता जाँच के लिए, कुछ सीमाओं के साथ।
  • GIN इंडेक्स ऐरे और JSONB जैसे जटिल डेटा के भीतर मौजूद तत्वों की कुशल क्वेरी के लिए।
  • GiST इंडेक्स स्थानिक डेटा, सीमा प्रकार और जटिल ऑपरेटरों के लचीले इंडेक्सीकरण के लिए।

ये विशेष इंडेक्स आपको उन क्वेरी को अनुकूलित करने में सक्षम बनाते हैं जिन्हें बी-ट्री कुशलता से संभाल नहीं पाते। अगले पाठ में हम आंशिक और अभिव्यक्ति इंडेक्स का अध्ययन करेंगे!

शुरुआत निःशुल्क

एआई शिक्षक के साथ SQL सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
22
पाठ
88

अक्सर पूछे जाने वाले प्रश्न

क्या “Hash, GIN और GiST इंडेक्स” पाठ निःशुल्क है?

हाँ — PostgreSQL प्रदर्शन और क्वेरी अनुकूलन अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Hash, GIN और GiST इंडेक्स” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Hash, GIN और GiST इंडेक्स” में मैं क्या सीखूँगा?

विशिष्ट डेटा प्रकारों और क्वेरी पैटर्न के लिए hash, GIN और GiST इंडेक्स के उपयोग के मामलों तथा लाभों को समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PostgreSQL प्रदर्शन और क्वेरी अनुकूलन का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या PostgreSQL प्रदर्शन और क्वेरी अनुकूलन शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Hash, GIN और GiST इंडेक्स” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Hash, GIN और GiST इंडेक्स
  2. आंशिक और एक्सप्रेशन इंडेक्स
  3. कवरिंग इंडेक्स और केवल-इंडेक्स स्कैन
  4. बड़े क्रमिक डेटा के लिए BRIN index
← PostgreSQL प्रदर्शन और क्वेरी अनुकूलन पर वापस जाएँ