| इंडेक्स प्रकार |
|---|
| समानता, रेंज और क्रमबद्ध स्कैन के लिए संतुलित ट्री. ज़्यादातर डेटाबेस में डिफ़ॉल्ट. | =, <, >, BETWEEN, ORDER BY के लिए उपयोग करें. फ़ुल-टेक्स्ट सर्च के लिए नहीं. |
| इंडेक्स जिसका लीफ़ स्तर ख़ुद टेबल है. पंक्तियाँ की-क्रम में संग्रहीत होती हैं. प्रति टेबल एक. | InnoDB प्राइमरी की पर क्लस्टर होता है. इसके बिना SQL Server की टेबल heaps होती हैं. |
| अलग संरचना जिसमें कीज़ और बेस टेबल की ओर संकेतक होता है. प्रति टेबल कई. | heap पर यह row ID रखता है. क्लस्टर्ड टेबल पर यह क्लस्टरिंग की रखता है. |
| केवल समानता लुकअप के लिए हैश टेबल. स्थिर समय में सटीक मिलान. | केवल = ऑपरेशन के लिए; रेंज और क्रम के लिए B-tree चाहिए. SQL Server के memory-optimized हैश को पंक्ति-संख्या के निकट bucket count चाहिए. |
| Generalized Inverted Index. वैल्यूज़ को पंक्तियों से मैप करता है. ऐरे और फ़ुल-टेक्स्ट के लिए बना. | jsonb, ऐरे, tsvector, trigram सर्च के लिए उपयोग करें. B-tree से धीमा बनता है. |
| Generalized Search Tree. नॉन-स्केलर प्रकारों और ओवरलैप क्वेरीज़ के लिए विस्तार योग्य. | ज्यामितीय रेंज, kNN, exclusion कंस्ट्रेंट के लिए उपयोग करें. pg_trgm LIKE को तेज़ करता है. |
| स्पेस-पार्टीशंड GiST. radix या quad ट्री से डेटा को गैर-ओवरलैपिंग क्षेत्रों में बाँटता है. | पॉइंट, IP प्रीफ़िक्स और प्रीफ़िक्स मिलान के लिए. ओवरलैप क्वेरी के लिए नहीं; GiST लें. |
| Block Range Index. प्रति ब्लॉक-रेंज min/max रखता है. बहुत छोटा फ़ुटप्रिंट. | बड़ी, भौतिक रूप से क्रमबद्ध टेबल पर उपयोग करें. बनाना सस्ता, सिलेक्टिविटी कमज़ोर. |
| पंक्तियों की जगह कॉलम सेगमेंट के रूप में संग्रहीत इंडेक्स. उच्च कंप्रेशन, बैच निष्पादन. | कई पंक्तियों और कुछ कॉलम पर विश्लेषणात्मक स्कैन के लिए. सिंगल-रो लुकअप धीमे होते हैं. |
| MySQL और SQL Server में समर्पित इनवर्टेड शब्द-इंडेक्स. प्रति टेक्स्ट कॉलम बनता है. | MATCH AGAINST या CONTAINS उपयोग करें. Postgres फ़ुल-टेक्स्ट इसके बजाय tsvector पर GIN उपयोग करता है. |
| Oracle इंडेक्स जो प्रत्येक अद्वितीय वैल्यू के लिए एक bitmap रखता है. हर बिट एक पंक्ति दर्शाता है. | रीड-हेवी वेयरहाउस में कम-कार्डिनैलिटी कॉलम पर उपयोग करें. समवर्ती राइट प्रति bitmap क्रमबद्ध होते हैं. |
| DESC घोषित इंडेक्स कॉलम. उस कॉलम की कीज़ उल्टे क्रम में संग्रहीत होती हैं. | (a ASC, b DESC) जैसे मिश्रित सॉर्ट के लिए ज़रूरी. सादे DESC सॉर्ट सामान्य इंडेक्स को उल्टा भी पढ़ सकते हैं. |
| MySQL 8 इंडेक्स जिसे ऑप्टिमाइज़र नज़रअंदाज़ करता है. फिर भी हर राइट पर बना रहता है. | असर जाँचने के लिए ड्रॉप से पहले इंडेक्स छिपाएँ. रीबिल्ड के बिना दोबारा दिखाएँ. |
| डिज़ाइन |
|---|
| बहु-कॉलम इंडेक्स. अग्रस्थ कॉलम क्वेरी फ़िल्टर के क्रम से मेल खाने चाहिए. | पहले समानता, फिर रेंज क्रम में रखें. दो सिंगल इंडेक्स एक कंपोज़िट का विकल्प नहीं हैं. |
| WHERE प्रेडिकेट पर इंडेक्स. SQL Server इसे filtered index कहता है. केवल मेल खाती पंक्तियाँ कवर करता है. | केवल active='t' पंक्तियाँ इंडेक्स करें. आकार और राइट लागत आधी हो जाती है. |
| अतिरिक्त नॉन-की कॉलम जोड़ा हुआ B-tree. इंडेक्स-ओनली स्कैन heap लुकअप से बचते हैं. | बार-बार ली जाने वाली कॉलम INCLUDE से जोड़ें. इंडेक्स सॉर्ट करने योग्य बना रहता है. |
| इंडेक्स जो डुप्लिकेट वैल्यू प्रतिबंधित करता है. टकराते insert अस्वीकार करता है. | नैचुरल की और वन-टू-वन कंस्ट्रेंट के लिए. UNIQUE NULL कई NULL की अनुमति देता है. |
| कॉलम के बजाय कॉलम के फ़ंक्शन पर बना इंडेक्स. | lower(email) या date_trunc('day', created_at) इंडेक्स करें. क्वेरी को ठीक वही एक्सप्रेशन दोहराना होगा. |
| ऑपरेटर क्लास. परिभाषित करती है कि इंडेक्स किसी कॉलम के प्रकार की तुलना और संग्रह कैसे करे. | LIKE 'abc%' के लिए बिना केस-फ़ोल्डिंग varchar_pattern_ops सेट करें. डिफ़ॉल्ट समानता और रेंज के लिए ठीक हैं. |
| प्लान जो क्वेरी का उत्तर केवल इंडेक्स पेजों से देता है. heap कभी नहीं पढ़ा जाता. | हर ली गई कॉलम इंडेक्स या INCLUDE सूची में होनी चाहिए. Vacuum विज़िबिलिटी मैप अपडेट रखता है. |
| फ़ॉरेन की कॉलम को रेफ़रेंस करने वाली टेबल पर कोई स्वचालित इंडेक्स नहीं मिलता. | जिस FK कॉलम से join या delete करते हैं उसे इंडेक्स करें. इसके बिना cascade delete चाइल्ड टेबल स्कैन करता है. |
| रखरखाव |
|---|
| प्लान निरीक्षक. सिक्वेंशियल स्कैन, इंडेक्स चयन, लागत अनुमान दिखाता है. | EXPLAIN (ANALYZE, BUFFERS) उपयोग करें. 10M पंक्ति वाली टेबल पर Seq Scan का मतलब है गायब इंडेक्स. |
| प्लानर सांख्यिकी बनाने के लिए टेबल कॉलम के सैंपल लेता है. हिस्टोग्राम इंडेक्स चयन तय करते हैं. | बल्क लोड के बाद चलाएँ. पुरानी सांख्यिकी इंडेक्स्ड कॉलम पर seq scan करवाती है. |
| हर इंडेक्स राइट ओवरहेड बढ़ाता है. insert, update, delete प्रति इंडेक्स भुगतान करते हैं. | अप्रयुक्त इंडेक्स हटाएँ. pg_stat_user_indexes में उपयोग देखें. |
| प्रति-इंडेक्स उपयोग का Postgres व्यू. सांख्यिकी रीसेट के बाद से स्कैन और पढ़े गए tuple गिनता है. | अप्रयुक्त इंडेक्स खोजने के लिए idx_scan = 0 फ़िल्टर करें. काउंटर pg_stat_reset() से रीसेट करें. |
| पढ़ने या लिखने को रोके बिना इंडेक्स बनाता है. दो टेबल स्कैन चाहिए. | ट्रांज़ैक्शन के अंदर नहीं चल सकता. विफल बिल्ड हटाने के लिए एक INVALID इंडेक्स छोड़ देता है. |
| इंडेक्स हटाकर उसका स्टोरेज खाली करता है. डिफ़ॉल्ट रूप से एक्सक्लूसिव लॉक लेता है. | व्यस्त टेबल पर DROP INDEX CONCURRENTLY उपयोग करें. हटाने से पहले उपयोग सांख्यिकी देखें. |
| ब्लोटेड इंडेक्स रीबिल्ड करता है. मृत tuple से जगह वापिस लेता है. | प्रोडक्शन में REINDEX CONCURRENTLY उपयोग करें. इसके बिना लॉक राइट रोकते हैं. |
| मृत tuple और पेज गैप जो MVCC टेबल और उनके इंडेक्स में जमा होते हैं. | pgstattuple से मापें. बार-बार Vacuum करें; जब मृत स्थान हावी हो तो REINDEX. |
| लिखते समय पेज भरने का प्रतिशत. खाली जगह भविष्य के अपडेट सोख लेती है. | हॉट-अपडेट टेबल पर इसे 70-90 करें. भरे पेज page split को मजबूर करते हैं. |
| टेबल को इंडेक्स के क्रम में भौतिक रूप से फिर लिखता है. एक बार का ऑपरेशन. | क्रमबद्ध ब्लॉक के लिए BRIN के साथ जोड़ी बनाता है. आगे की राइट पर क्रम बना नहीं रहता. |