Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एंटिटी फ्रेमवर्क सभी विदेशी कुंजी स्तंभों को अनुक्रमित करता है

ईएफ कोड फर्स्ट में, आप एक विदेशी कुंजी संबंध का मॉडल बनाने का सामान्य कारण संस्थाओं के बीच नौगम्यता के लिए है। Country . के एक साधारण परिदृश्य पर विचार करें और City , निम्नलिखित LINQ कथन के लिए परिभाषित उत्सुक लोडिंग के साथ:

var someQuery = 
   db.Countries
     .Include(co => co.City)
     .Where(co => co.Name == "Japan")
     .Select(...);

इसके परिणामस्वरूप निम्नलिखित की तर्ज पर एक प्रश्न होगा:

SELECT *
FROM Country co
INNER JOIN City ci
  ON ci.CountryId = co.ID
WHERE co.Name = 'Japan';

City.CountryId . पर विदेशी कुंजी पर इंडेक्स के बिना , SQL को जॉइन के दौरान देश के शहरों को फ़िल्टर करने के लिए शहरों की तालिका को स्कैन करने की आवश्यकता होगी।

FK इंडेक्स में प्रदर्शन लाभ भी होंगे यदि पंक्तियों को हटा दिया जाता है मूल देश तालिका से, संदर्भात्मक अखंडता के रूप में किसी भी लिंक की गई शहर पंक्तियों की उपस्थिति का पता लगाने की आवश्यकता होगी (चाहे FK में ON CASCADE DELETE हो) परिभाषित है या नहीं)।

TL;DR

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

  • यदि विदेशी कुंजी की चयनात्मकता बहुत कम है, उदा। उपरोक्त परिदृश्य में, यदि देशों की तालिका में सभी शहरों का 50% जापान में था, तो सूचकांक उपयोगी नहीं होगा।

  • यदि आप वास्तव में कभी भी रिश्ते में नेविगेट नहीं करते हैं।

  • अगर आप पैरेंट टेबल से पंक्तियों को कभी नहीं हटाते हैं (या PK पर अपडेट करने का प्रयास करते हैं)।

एक अतिरिक्त अनुकूलन विचार यह है कि Clustered Index . में विदेशी कुंजी का उपयोग करना है या नहीं चाइल्ड टेबल (यानी देश के अनुसार क्लस्टर सिटीज)। यह अक्सर माता-पिता में फायदेमंद होता है:बाल तालिका संबंध जहां माता-पिता के लिए सभी बाल पंक्तियों को एक साथ पुनर्प्राप्त करना आम जगह है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर:कैसे परीक्षण करें कि किसी स्ट्रिंग में केवल अंक वर्ण हैं?

  2. MySQL - तालिका बनाते समय एक साथ उपयोग किए जाने पर प्राथमिक कुंजी, अद्वितीय कुंजी और कुंजी का अर्थ

  3. अपने डेटा को क्षैतिज कैसे बनाएं

  4. टी-एसक्यूएल में टाइमस्टैम्प का मतलब सी # में क्या है?

  5. एसक्यूएल 2005 में पिवोट