GIN से JSONB इंडेक्स करना
JSONB दस्तावेज़ों पर GIN इंडेक्स बनाएँ और तेज़ समावेशन क्वेरी के लिए jsonb_path_ops का उपयोग करें
GIN से JSONB इंडेक्स करना, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
JSONB के लिए GIN क्यों
JSONB दस्तावेज़ों में कई “आइटम” होते हैं (कुंजी-मान युग्म और सारणी के तत्व)। GIN (सामान्यीकृत उलटा इंडेक्स) उन क्वेरी के लिए बनाया गया है जिनमें पूछा जाता है, “वे पंक्तियाँ जहाँ दस्तावेज़ में X शामिल है”।
डिफ़ॉल्ट GIN इंडेक्स
डिफ़ॉल्ट ऑपरेटर वर्ग @>, ?, ?|, ?& का समर्थन करता है:
CREATE INDEX events_data_gin ON events USING GIN (data);
-- These now use the index:
SELECT * FROM events WHERE data @> '{"type":"login"}';
SELECT * FROM events WHERE data ? 'error';jsonb_path_ops: छोटा और तेज़
समावेशन तक सीमित क्वेरी के लिए इसका आकार आधा और गति अधिक होती है, लेकिन यह केवल @> का समर्थन करता है:
CREATE INDEX events_data_gin ON events USING GIN (data jsonb_path_ops);
-- Supports @>
-- Does NOT support ? ?| ?&
SELECT * FROM events WHERE data @> '{"type":"login"}';केवल एक पथ को इंडेक्स करें
यदि आप केवल एक कुंजी पर क्वेरी करते हैं, तो निकाले गए मान पर अभिव्यक्ति B-tree इंडेक्स और भी तेज़ होता है:
CREATE INDEX events_user_id_idx
ON events (((data->>'user_id')::BIGINT));
SELECT * FROM events WHERE (data->>'user_id')::BIGINT = 42;सारणियों के अंदर इंडेक्स करना
सारणी के पथ पर GIN इंडेक्स का उपयोग करें:
CREATE INDEX events_tags_gin
ON events USING GIN ((data->'tags'));
SELECT * FROM events WHERE data->'tags' @> '["admin"]'::JSONB;JSONB इंडेक्स को अन्य फ़िल्टर के साथ जोड़ना
संयुक्त शर्तें JSONB वाले हिस्से के लिए GIN इंडेक्स और गैर-JSONB वाले हिस्से के लिए किसी अन्य इंडेक्स का उपयोग कर सकती हैं:
EXPLAIN ANALYZE
SELECT * FROM events
WHERE data @> '{"type":"login"}'
AND ts >= NOW() - INTERVAL '7 days';
-- BitmapAnd: GIN index on data, B-tree on tsGIN का लेखन प्रदर्शन
GIN अपडेट B-tree की तुलना में अधिक महँगे होते हैं। बहुत अधिक लेखन वाली तालिकाओं के लिए fastupdate विकल्प GIN अपडेट को लंबित सूची में समूहित करता है, जिसे VACUUM खाली करता है।
CREATE INDEX events_data_gin ON events USING GIN (data) WITH (fastupdate = on);
-- Flush manually if needed:
SELECT gin_clean_pending_list('events_data_gin');इंडेक्स का आकार
JSONB GIN इंडेक्स बड़े हो सकते हैं। बहुत बड़ी तालिकाओं के लिए इन विकल्पों पर विचार करें:
- केवल विशिष्ट पथों को इंडेक्स करना (अभिव्यक्ति इंडेक्स)
- केवल समावेशन के लिए jsonb_path_ops पर स्विच करना
- सक्रिय फ़ील्ड को वास्तविक कॉलम में अलग करना
ट्राइग्राम के साथ संयोजन
JSONB के अंदर अस्पष्ट पाठ खोजने के लिए उसे TEXT अभिव्यक्ति में निकालें और pg_trgm GIN इंडेक्स जोड़ें:
CREATE INDEX events_message_trgm
ON events USING GIN ((data->>'message') gin_trgm_ops);इंडेक्सिंग कब मदद नहीं करती
यदि आपका फ़िल्टर हर पंक्ति को छूता है (चयनात्मकता बहुत कम है), तो इंडेक्स होने पर भी प्लानर क्रमिक स्कैन चुन सकता है। इसकी पुष्टि के लिए EXPLAIN ANALYZE का उपयोग करें।
JSONB इंडेक्स का रखरखाव
GIN इंडेक्स भी किसी अन्य इंडेक्स की तरह अनावश्यक रूप से बढ़ते हैं। समय-समय पर REINDEX CONCURRENTLY का उपयोग करें:
REINDEX INDEX CONCURRENTLY events_data_gin;पुनरावलोकन
GIN JSONB फ़िल्टर को मिलीसेकंड में पूरी होने वाली खोजों में बदल देता है।
- डिफ़ॉल्ट GIN: @>, ?, ?|, ?&
- jsonb_path_ops: छोटा, केवल समावेशन के लिए
- निकाले गए स्केलर पर अभिव्यक्ति B-tree: एक कुंजी के लिए सबसे तेज़
त्वरित जाँच
आप JSONB कॉलम पर केवल data @> ... की क्वेरी करते हैं। पूर्ण सुविधा समर्थन के साथ सबसे छोटा इंडेक्स कौन-सा होगा?
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 46
- पाठ
- 183
अक्सर पूछे जाने वाले प्रश्न
क्या “GIN से JSONB इंडेक्स करना” पाठ निःशुल्क है?
हाँ—“GIN से JSONB इंडेक्स करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“GIN से JSONB इंडेक्स करना” में मैं क्या सीखूँगा?
JSONB दस्तावेज़ों पर GIN इंडेक्स बनाएँ और तेज़ समावेशन क्वेरी के लिए jsonb_path_ops का उपयोग करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“GIN से JSONB इंडेक्स करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- JSONB बनाम JSON: किसका उपयोग करें
- पाथ ऑपरेटर: -> ->> @>
- GIN से JSONB इंडेक्स करना
- मॉडलिंग: JSONB सामान्यीकरण से कब बेहतर है