2010-09-06 9 views

उत्तर

43

हाँ यह एक अच्छा अभ्यास है, यहां देखें: When did SQL Server stop putting indexes on Foreign Key columns?पर स्क्रॉल करें क्या विदेशी कुंजी कॉलम अनुक्रमणित करने के कोई लाभ हैं? अनुभाग

+2

कुछ मामलों में यह एक अच्छा अभ्यास है, लेकिन * हर * विदेशी कुंजी के लिए नहीं। –

35

हर विदेशी कुंजी? नहीं। जहां चयनिता कम है (यानी कई मान डुप्लिकेट किए गए हैं), एक सूचकांक तालिका स्कैन से अधिक महंगा हो सकता है। साथ ही, एक उच्च गतिविधि वातावरण में (पूछताछ की तुलना में अधिक सम्मिलित/अद्यतन/हटाएं गतिविधि) इंडेक्स को बनाए रखने की लागत सिस्टम के समग्र प्रदर्शन को प्रभावित कर सकती है।

+1

ठीक है। तो क्या वहां कुछ संख्यात्मक सीमा या दहलीज है जो इंडेक्स के निर्माण को ट्रिगर कर सकती है? – GRGodoi

11

किसी विदेशी कॉलम को अनुक्रमणित करने का कारण किसी भी अन्य कॉलम को अनुक्रमणित करने का कारण है: यदि आप कॉलम द्वारा पंक्तियों को फ़िल्टर करने जा रहे हैं तो एक अनुक्रमणिका बनाएं।

उदाहरण के लिए, यदि आपके पास टेबल [उपयोगकर्ता] (आईडी int, नाम वर्चर (50)) और तालिका [उपयोगकर्ता एक्शन] (उपयोगकर्ता आईडी int, एक्शन वर्कर (50)) है तो आप शायद यह खोज सकेंगे कि आप क्या ढूंढ पाएंगे एक विशेष उपयोगकर्ता ने किया कार्रवाई। फिर उस पर एक सूचकांक डाल करने के लिए कोई जरूरत नहीं है आप कॉलम के आधार पर पंक्तियों को फ़िल्टर करने का इरादा नहीं

select ActionName from [UserAction] where UserID = @UserID 

हैं: उदाहरण के लिए, आप निम्न क्वेरी को चलाने के लिए जा रहे हैं। और यहां तक ​​कि यदि आप करते हैं तो यह केवल तभी लायक है जब आपके पास 20 से 30 पंक्तियां हों।

+0

क्या आप सुनिश्चित हैं कि जब मैं UserAction पर कोई प्रविष्टि निष्पादित करता हूं तो इंडेक्स विदेशी कुंजी सत्यापन के दौरान उपयोगी नहीं होगा? – GRGodoi

+1

नहीं। तालिका और कॉलम के विरुद्ध सत्यापन किया जाता है जिसमें प्राथमिक कुंजी या अद्वितीय बाधा होती है (उदा। [उपयोगकर्ता]। [आईडी])। [UserAction] तालिका के उपयोगकर्ता आईडी कॉलम को सत्यापित करने की कोई आवश्यकता नहीं है। आप केवल उस कॉलम का संदर्भ ले सकते हैं जिसमें प्राथमिक कुंजी या अनन्य बाधा है, इसलिए इसे हमेशा अनुक्रमित किया जाता है। – ItsMe

+2

विचार करने की दूसरी कार्रवाई 'उपयोगकर्ता' से पंक्तियों को हटा रही है, जो इंजन को 'उपयोगकर्ता आईडी' के आधार पर 'उपयोगकर्ता क्रिया' में पंक्तियों की तलाश करने का कारण बनती है। –

5

MSDN से: FOREIGN KEY Constraints

एक विदेशी कुंजी पर एक सूचकांक बनाया जा रहा है निम्नलिखित कारणों के लिए अक्सर उपयोगी है:

  • परिवर्तन करने के लिए प्राथमिक कुंजी बाधाओं संबंधित तालिकाओं में विदेशी कुंजी बाधाओं के साथ जाँच कर रहे हैं।
  • विदेशी कुंजी कॉलम अक्सर मानदंडों में शामिल होने के लिए उपयोग किए जाते हैं जब संबंधित तालिकाओं से डेटा को प्राथमिक या अद्वितीय कुंजी कॉलम या अन्य तालिका में कॉलम के साथ एक तालिका के विदेशी कुंजी बाधा में कॉलम या कॉलम से मेल करके क्वेरी में जोड़ा जाता है।
संबंधित मुद्दे