विदेशी कुंजी के रूप में समग्र प्राथमिक कुंजी दक्षता


12

मेरे पास एक कंपोजिट प्राइमरी की है (जिसमें 4 कॉलम होते हैं) के साथ एक टेबल है जिसका उपयोग यह सुनिश्चित करने के लिए किया जाता है कि कोई डुप्लिकेट तालिका में दर्ज न हो। मुझे अब एक नई तालिका की आवश्यकता है जिसे इस तालिका में विदेशी कुंजियों के रूप में संदर्भ देने की आवश्यकता होगी।

मेरा प्रश्न यह है कि लुकअप गति के लिए कौन सा तरीका अधिक कुशल है:

1) क्या मैं सभी 4 कॉलमों सहित नई तालिका बनाता हूं और उन सभी को एक विदेशी कुंजी में संदर्भित करता हूं।

या

2) क्या मैं प्राथमिक कुंजी तालिका में एक नया पहचान स्तंभ बनाता हूं और इसे नई तालिका में एक विदेशी कुंजी के रूप में उपयोग करता हूं।

इस डेटाबेस से बहुत बड़ी मात्रा में डेटा रखने की उम्मीद की जाती है, इसलिए मैंने इसे अब तक बनाया है, जिसमें प्रत्येक तालिका में रखे गए डेटा की मात्रा को न्यूनतम करने की दृष्टि से बनाया गया है। इसे ध्यान में रखते हुए, विकल्प 2 सबसे अच्छा तरीका होगा क्योंकि मैं प्रत्येक पंक्ति के लिए 2 इंट कॉलम और डेटाइम कॉलम को बचाऊंगा, लेकिन मैं अनावश्यक होने पर लुकअप समय बढ़ाने से बचना चाहता हूं।


1
मैं व्यक्तिगत रूप से लगभग हमेशा एक सरोगेट कुंजी (जैसे INT IDENTITY) का उपयोग करता हूँ ऐसे मामले में - संदर्भित करता है और उस तालिका में शामिल होना बहुत आसान है। डुप्लिकेट से बचने के लिए, उन चार स्तंभों पर एक UNIQUE बाधा डालें । इसके अलावा: संकीर्ण प्राथमिक कुंजियाँ प्रदर्शन के कारणों के लिए बहुत बेहतर हैं (यदि उन्हें क्लस्टरिंग कुंजी के रूप में उपयोग किया जाता है)
marc_s

जवाबों:


11

एक साधारण सिंथेटिक पूर्णांक पीके का उपयोग करने की लागत छोटी है, और आपके मामले में लाभ संभवतः काफी होगा।

  • जैसा कि आप बताते हैं, आपके पास बहुत सरल एफके संबंध होंगे।
  • एक छोटा पीके छोटे (और तेज) सूचकांकों के लिए बनाता है। इस तरह के एक कॉलम को जोड़कर आपका कुल टेबल स्पेस संभवत: कम हो जाएगा।
  • यदि व्यावसायिक नियम कभी बदलते हैं, तो आपको तालिका को फिर से नहीं बनाना पड़ेगा।

केवल एक सामग्री जो दिमाग में आती है, वह यह है कि आप उन प्रश्नों पर प्रदर्शन खो सकते हैं, जो समग्र PK पर क्लस्टरिंग से लाभान्वित हुए। यदि आपको लगता है कि यह महत्वपूर्ण होने की संभावना है, तो संयुक्त उम्मीदवार कुंजी पर क्लस्टरिंग जारी रखें, लेकिन सिंथेटिक कुंजी पर पीके डालें।


5

SQL दुनिया में जितनी बार भी हो, उत्तर है: "यह निर्भर करता है।"

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

ऐसे मामले हैं जो विदेशी कुंजी के रूप में प्राकृतिक कुंजी का उपयोग करते समय एक प्रदर्शन में सुधार देखते हैं। हालांकि, ज्यादातर मामलों में आप छोटी कुंजी के साथ बेहतर होने जा रहे हैं (पढ़ें: सरोगेट कुंजी)।

यदि आप उस पहचान कॉलम को पेश करते हैं, तो मैं इसे प्राथमिक कुंजी भी बना दूंगा और बदले में "प्राकृतिक" कॉलम को UNIQUE CONSTRAINT बना दूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.