PostgreSQL स्वचालित रूप से प्राथमिक कुंजी और अद्वितीय बाधाओं पर अनुक्रमणिका बनाता है, लेकिन विदेशी कुंजी संबंधों के संदर्भ पक्ष पर नहीं।
जब Pg एक अंतर्निहित अनुक्रमणिका बनाता है तो यह एक NOTICE
का उत्सर्जन करेगा -लेवल संदेश जिसे आप psql
. में देख सकते हैं और/या सिस्टम लॉग करता है, ताकि आप देख सकें कि ऐसा कब होता है। स्वचालित रूप से बनाए गए इंडेक्स \d
. में दिखाई देते हैं तालिका के लिए भी आउटपुट।
अद्वितीय अनुक्रमणिका पर दस्तावेज़ कहता है:
<ब्लॉकक्वॉट>PostgreSQL स्वचालित रूप से विशिष्टता को लागू करने के लिए प्रत्येक अद्वितीय बाधा और प्राथमिक कुंजी बाधा के लिए एक अनुक्रमणिका बनाता है। इस प्रकार, प्राथमिक कुंजी स्तंभों के लिए स्पष्ट रूप से एक अनुक्रमणिका बनाना आवश्यक नहीं है।
और बाधाओं पर प्रलेखन कहता है:
<ब्लॉकक्वॉट>चूंकि संदर्भित तालिका से किसी पंक्ति का DELETE या संदर्भित स्तंभ के अद्यतन के लिए पुराने मान से मेल खाने वाली संदर्भ तालिका के फ़ोरो के स्कैन की आवश्यकता होगी, इसलिए अक्सर संदर्भ स्तंभों को अनुक्रमित करना एक अच्छा विचार है। चूंकि इसकी हमेशा आवश्यकता नहीं होती है, और इंडेक्स करने के तरीके पर कई विकल्प उपलब्ध हैं, एक विदेशी कुंजी बाधा की घोषणा स्वचालित रूप से संदर्भित कॉलम पर एक इंडेक्स नहीं बनाती है।
इसलिए यदि आप चाहते हैं तो आपको विदेशी-कुंजी पर स्वयं अनुक्रमणिका बनाना होगा।
ध्यान दें कि यदि आप प्राथमिक-विदेशी-कुंजी का उपयोग करते हैं, जैसे एम-टू-एन तालिका में 2 एफके, पीके के रूप में, तो आपके पास पीके पर एक अनुक्रमणिका होगी और संभवत:कोई अतिरिक्त अनुक्रमणिका बनाने की आवश्यकता नहीं है।
हालांकि आमतौर पर आपके रेफ़रिंग-साइड विदेशी कुंजी कॉलम पर एक इंडेक्स बनाना (या शामिल करना) एक अच्छा विचार है, इसकी आवश्यकता नहीं है। आपके द्वारा जोड़ा गया प्रत्येक इंडेक्स डीएमएल संचालन को थोड़ा धीमा कर देता है, इसलिए आप प्रत्येक INSERT
पर एक प्रदर्शन लागत का भुगतान करते हैं। , UPDATE
या DELETE
. यदि सूचकांक का उपयोग शायद ही कभी किया जाता है तो यह इसके लायक नहीं हो सकता है।