विदेशी कुंजियों पर अनुक्रमित करने की आवश्यकता


30

मैं अनुक्रमित, प्राथमिक कुंजी और विदेशी कुंजी के साथ संघर्ष कर रहा हूं ... और उन सभी को रखने की आवश्यकता।

अगर मेरे पास दो टेबल हैं, तो दोनों में एक प्राथमिक कुंजी के रूप में एक पूर्णांक होता है।
पहली तालिका एक एफके के माध्यम से दूसरी तालिका की प्राथमिक कुंजी को संदर्भित करती है।

  • दोनों तालिकाओं पर मेरे पास आईडी कॉलम पर एक प्राथमिक कुंजी सूचकांक है
  • मैंने table1.ref_fieldदूसरी तालिका ( table2.id) के पीके के संदर्भ में एक FK बाधा बनाई
  • और मैंने एक सूचकांक जोड़ा table1.ref_field

क्या यह इन सूचकांक, प्राथमिक और विदेशी कुंजी को व्यवस्थित करने का सबसे अच्छा तरीका है?

जवाबों:


30

आपका डिजाइन अच्छा है। यदि आपको कोई प्रदर्शन समस्या हो रही है (जिसे आप डिज़ाइन समय पर नहीं जान सकते हैं), तो आपको तालिका 2.id कॉलम के समान क्रम (ASC) में स्तंभ table1.ref_field पर एक सूचकांक बनाना चाहिए। यह उन तालिकाओं / स्तंभों के बीच जुड़ने पर प्रदर्शन में सुधार करेगा। किसी भी इंडेक्स को बनाए रखने के लिए ओवरहेड है, इसलिए आप उस लागत को बेहतर प्रदर्शन के लाभ के खिलाफ तौलना चाहते हैं।

PostgreSQL स्वचालित रूप से विदेशी कुंजी स्तंभों पर ऐसे सूचकांक नहीं बनाता है जो अन्य स्तंभों का संदर्भ देते हैं, दुर्भाग्य से, इसलिए आपको इसे स्वयं करना होगा।

यहाँ एक ही विषय पर एक StackOverflow सवाल है:

विदेशी कुंजी और प्राथमिक कुंजी पर पोस्टग्रेज और इंडेक्स

यहां यह निर्धारित करने में सहायता के लिए एक क्वेरी है कि आपको इस तरह के सूचकांक को जोड़ने से कहां फायदा हो सकता है:

Postgresql: फॉरेन कीज़ पर इंडेक्स


यह हमेशा दुर्भाग्यपूर्ण नहीं है - यदि आप DELETEसंदर्भित तालिका से नहीं आते हैं तो यह आपको अप्रयुक्त सूचकांक बनाए रखने से बचने के लिए बहुत सारे I / O और CPU बचा सकता है। मुझे लगता है कि इसे डिफ़ॉल्ट रूप से बनाया जाना चाहिए, बस इसके निर्माण को दबाने का विकल्प होगा।
क्रेग रिंगर

क्रेग रिंगर न केवल DELETE का उस पर प्रभाव पड़ सकता है, अगर आपने भाग से लेकर बाल तालिकाओं तक का चयन किया है, तो आपके पास प्रदर्शन संबंधी समस्याएं भी होंगी। ओरेकल से यह प्रलेखन अधिक समझाता है: asktom.oracle.com/pls/asktom/…
777Anon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.