अलग स्कीमा का उपयोग SQL Server 2008 प्रदर्शन को कैसे प्रभावित करता है?


11

मैं हमारे SQL Server 2008 डेटाबेस में विभिन्न उद्देश्यों के साथ वस्तुओं के लिए अलग स्कीमा का उपयोग करना चाहता हूं। अभी हम एक टेबल या संग्रहित प्रक्रिया के उद्देश्य को इंगित करने के लिए एक काफी दिमाग-सुन्न नामकरण सम्मेलन का उपयोग करते हैं, और उपसर्गों का अर्थ है कि हमें अद्वितीय नाम की शुरुआत देखने से पहले पांच या छह xharacters स्कैन करना होगा। मैं तालिकाओं के लिए अलग-अलग स्कीमा का उपयोग करना चाहूंगा जो कि बस यूआई (मेनू, व्यक्ति द्वारा भूमिका, आदि) को चलाने के लिए उपयोग किए जाते हैं और उन लोगों के लिए जो आयाम तालिका बनाम तथ्य तालिकाओं, आदि हैं।

मेरा सवाल यह है कि क्या मल्टीपल स्कीमा (स्कीमा?) का उपयोग करने से प्रदर्शन पर असर पड़ेगा?

जवाबों:


4

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


1

प्रदर्शन में कोई अंतर नहीं। हालाँकि, आप अभी स्कीमा का उपयोग कर रहे हैं (भले ही आप इसे न जानते हों)।

स्कीमा के लिए संदर्भ का उपयोग करते हैं जैसे तालिकाओं, संग्रहित प्रक्रियाओं, UDFs, आदि कर रहे हैं के रूप में वस्तुओं नहीं स्कीमा से योग्य है एक प्रदर्शन प्रभाव पड़ता है। संदर्भ हमेशा स्कीमा द्वारा योग्य होना चाहिए। ऐसे अयोग्य संदर्भों को हल करना होगा, और ऐसा ही होता है:

  • सबसे पहले, एक ही नाम की एक वस्तु की तलाश करें और उपयोगकर्ता के डिफ़ॉल्ट स्कीमा के तहत टाइप करें, जिसके तहत सत्र स्थापित किया गया था (जैसे jsmith)। यदि पाया जाता है, तो उस उदाहरण का उपयोग किया जाता है।
  • अन्यथा, स्कीमा के तहत एक ही नाम और प्रकार की वस्तु देखें dbo

इसके कई प्रभाव हैं:

  • यदि संदर्भ स्कीमा-योग्य है, तो अधिकांश समय, दो लुकअप को एक ही लुकअप के बजाय संदर्भ को हल करने की आवश्यकता होती है।
  • निष्पादन योजना जब क्वेरी / संग्रहीत कार्यविधि / उपयोगकर्ता-निर्धारित फ़ंक्शन से बाध्य होती है, तो उसे कैश और पुन: उपयोग नहीं किया जा सकता है।

अंतिम प्रभाव जो आपको केवल तभी मिलेगा - जब कुछ टूटता है, तो यह है कि विभिन्न उपयोगकर्ता किसी दिए गए क्वेरी या संग्रहीत कार्यविधि से भिन्न परिणाम प्राप्त कर सकते हैं। select * from foo join barडीबी के मालिक के रूप में मेरे लिए कुछ ठीक हो सकता है; यह उस उपयोगकर्ता के लिए तोड़ा जा सकता है jsmith, जिसने अनजाने में या नहीं, एक ही डेटाबेस में fooअपने स्वयं के स्कीमा ( jsmith.foo) के तहत एक तालिका बनाई ।

इस कारण से, createऔर dropस्टेटमेंट को ऑब्जेक्ट के नाम को स्कीमा-क्वालिफाई किया जाना चाहिए या बनाया जा रहा है।

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