"आंशिक मिलान सूचकांक" क्या है?


27

मैं SQL सर्वर 2016 में पेश किए गए "विदेशी कुंजी संदर्भ चेक" क्वेरी प्लान ऑपरेटर के बारे में अधिक जानने की कोशिश कर रहा हूं। इसके बारे में बहुत अधिक जानकारी नहीं है। Microsoft ने यहां इसकी घोषणा की और मैंने इसके बारे में यहां ब्लॉग किया । नए ऑपरेटर को 254 या अधिक आवक विदेशी कुंजी संदर्भों के साथ मूल तालिका से एक पंक्ति हटाकर देखा जा सकता है: dbfiddle लिंक

ऑपरेटर विवरण में तीन अलग-अलग गणनाएं प्रदर्शित की गई हैं:

FK जाँच विवरण

  • विदेशी कुंजी संदर्भ गणना आने वाली विदेशी कुंजी की संख्या है।
  • कोई मिलान अनुक्रमणिका गणना उपयुक्त सूचकांक के बिना आने वाली विदेशी कुंजियों की संख्या नहीं है। यह सत्यापित करते हुए कि अद्यतन की गई या हटाई गई तालिका इस बात का उल्लंघन नहीं करेगी कि बाधा को बाल तालिका के स्कैन की आवश्यकता होगी।
  • मुझे नहीं पता कि आंशिक मिलान अनुक्रमित गणना क्या दर्शाती है।

इस संदर्भ में आंशिक मिलान सूचकांक क्या है? मैं निम्नलिखित में से कोई भी काम करने में सक्षम नहीं था:

  • फ़िल्टर किए गए इंडेक्स
  • INCLUDEइंडेक्स के लिए फॉरेन की कॉलम को कॉलम की तरह रखना
  • दूसरे प्रमुख कॉलम के रूप में विदेशी कुंजी कॉलम के साथ अनुक्रमित
  • कई कॉलम विदेशी कुंजियों के लिए एकल स्तंभ अनुक्रमणिका
  • कई कॉलम विदेशी कुंजी के लिए "इंडेक्स जॉइन" योजना को सक्षम करने के लिए कई कवरिंग इंडेक्स बनाना

डैन गुज़मैन ने बताया कि मल्टीपल कॉलम फॉरेन कीज़ इंडेक्स कीज़ से मेल खा सकती हैं, भले ही इंडेक्स कीज़ फॉरेन की कॉलम से अलग ऑर्डर में हों। यदि कोई व्यक्ति आंशिक मिलान अनुक्रमणिकाओं के बारे में अधिक जानने के लिए शुरुआती बिंदु के रूप में इसका उपयोग करने में सक्षम है, तो उसका कोड यहां है।

जवाबों:


13

मैंने लोगों की तुलना में अधिक होशियार लोगों से बात की और हम जल्द ही इसका दस्तावेजीकरण करेंगे ™।

इस की वास्तविक परिभाषा, अंतरिम में है:

PartialMatchingIndexCount उन संदर्भों की संख्या को दर्शाता है, जिन्हें इंडेक्स सीक का उपयोग करके चेक किया जा सकता है, लेकिन इंडेक्स कुंजी चेक किए जा रहे सभी कॉलम को कवर नहीं करती है। उदाहरण के लिए, संबंधित ForeignKeyReferenceCheck तत्वों में सीक प्रेडिक्ट और प्रेडिकेटेट दोनों तत्व होते हैं।

के अतिरिक्त:

यदि यह संख्या 0 से अधिक है, तो एक संभावित प्रदर्शन समस्या है, अगर आंशिक मिलान बड़ी संख्या में पंक्तियों के परिणामस्वरूप होता है।


6
एक कार्यशील उदाहरण या वास्तविक दस्तावेज शानदार होगा। बाउंटी ने पेशकश की
टॉम वी - टीम मोनिका

3

कुछ और गुगली करने के बाद, मैं एक पोस्ट के साथ आने में कामयाब रहा जिसमें "आंशिक मिलान सूचियों" और विदेशी कुंजी का उल्लेख है

1 मार्च, 2013 को कार्लोस क्लैप के कोड ब्लॉग शीर्षक में ब्लॉग पोस्ट मेंForeign Keys without Indexes संग्रहीत प्रक्रिया है, जिसे Util_FKsWithoutIndexesविदेशी कुंजी के लिए देखा जाता है जिसमें FK संबंधों के लिए उचित अनुक्रमित नहीं है। (ऐसा लगता है कि इस ब्लॉगर ने SQL सर्वर सेंट्रल The Ultimate Index-Less Foreign-Key Finder(15 अक्टूबर, 2009) से इसे हटा दिया है ) ब्लॉग निम्नलिखित कहता है:

विदेशी प्रमुख बाधाओं के लिए खोजें जिनके पास पूरी तरह से अनुक्रमणिकाएं नहीं हैं।

सबसे अच्छा आंशिक मिलान अनुक्रमणिका का मिलान माचिस और स्तंभ की तुलना के साथ किया जाता है

प्रत्येक विदेशी-कुंजी के लिए कोई मिलान सूचकांक या आंशिक-मिलान सूचकांक के साथ एक क्रिएट इंडेक्स टेम्पलेट बनाता है।

आवश्यकतानुसार अनुकूलित करें (यदि आप इसे शामिल करना चाहते हैं, तो इसमें शामिल करें, या यदि यह प्राथमिक कुंजी का एक हिस्सा होना चाहिए, या यदि आप किसी अन्य सूचकांक के साथ विलय करना चाहते हैं)

FKs लापता पूर्ण मिलान अनुक्रमणिका संदर्भात्मक अखंडता की जाँच करने के लिए टेबल-स्कैन के कारण संदर्भित तालिका पर DELETES के प्रदर्शन को गंभीर रूप से चोट पहुँचा सकते हैं, साथ ही संदर्भित तालिकाओं पर SELECTS जहाँ विदेशी कुंजी स्तंभ (s) WHERE या JOIN में भविष्यवाणी करते हैं (यह आपको प्रभावित करेगा कि क्या एक बाधा मौजूद है या नहीं)। यह केवल सूचकांक के पहले एन कॉलम की जांच करता है जहां एन विदेशी कुंजी बाधा में कॉलम की संख्या है।

इंडेक्स कॉलम ऑर्डर को इस से परे सत्यापित नहीं किया गया है (एक दो-कोल एफके जिसमें 3-कॉल इंडेक्स के दूसरे हिस्से में 1 मिलान कॉलम एक आंशिक मैच के रूप में आउटपुट किया जाएगा)

यदि आपके डेटाबेस में कोई विदेशी कुंजी बाधा नहीं है, तो यह टूल आपके लिए बेकार होगा।

कई डेटाबेस में आंशिक विदेशी कुंजी बाधा कवरेज है। यह केवल संबंधित तालिकाओं पर काम करता है जहां अड़चनें घोषित की जाती हैं।

यदि मैं इसे सही ढंग से समझता हूं, अगर एक एफके संबंध में एक सूचकांक नहीं है जो किसी आवश्यक सूचकांक में प्रत्येक स्तंभ से मेल खाता है, तो कुछ ऐसे सूचकांक हो सकते हैं जिनमें कुछ स्तंभ हैं। उदाहरण के लिए, यदि किसी FK संबंध में तीन कॉलम ( a, ) हैं b, cलेकिन उन तीन कॉलमों के साथ कोई इंडेक्स नहीं है, तो एक इंडेक्स मौजूद हो सकता है जिसमें (( a, b) या ( a, c) या ( ) b, cऔर प्रश्नों के साथ मदद मिल सकती है लेकिन लापता कॉलम के साथ पंक्तियों के लिए कुछ इंडेक्स स्कैन की आवश्यकता होती है।

यदि ऐसे सभी इंडेक्स नहीं हैं जो FK बाधा का समर्थन कर सकते हैं, तो "आंशिक मिलान इंडेक्स काउंट" शून्य होगा ( 0), या कम से कम इस गिनती को नहीं बढ़ाएगा।


क्या यह है जो आप के मन में था? अभी भी यह काम करने के लिए नहीं मिल सकता है ... dbfiddle.uk/…
Obbish

बिल्कुल नहीं। के साथ एक FK बनाने की कोशिश करें (FKey2,FKey3)और एक सूचकांक बनाएं FKey2। कृपया प्रयास करें।
रोलैंडमाइसीडीडीबीए

कृपया याद रखें कि मैं एक SQL सर्वर आदमी नहीं हूँ, लेकिन मैं सिर्फ मदद करने की कोशिश कर रहा हूँ।
रोलैंडम्यूसीडीडीबीए

मैं कोशिश करने के लिए किसी भी विचार को समझता हूं और उसकी सराहना करता हूं। मुझे काम करने के लिए दो कॉलम एक भी नहीं मिल सकते हैं।
जो ओबिश

आप खाई create unique index FULL_IX_UNIQUE ON FK_PARENT_TABLE (FKey, Fkey2, Fkey3), सूचकांक को चालू रख सकते हैं FKey2और फिर से कोशिश कर सकते हैं।
रोलैंडमाइसीडीडीबीए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.