प्रदर्शन में कोई अंतर नहीं। हालाँकि, आप अभी स्कीमा का उपयोग कर रहे हैं (भले ही आप इसे न जानते हों)।
स्कीमा के लिए संदर्भ का उपयोग करते हैं जैसे तालिकाओं, संग्रहित प्रक्रियाओं, UDFs, आदि कर रहे हैं के रूप में वस्तुओं नहीं स्कीमा से योग्य है एक प्रदर्शन प्रभाव पड़ता है। संदर्भ हमेशा स्कीमा द्वारा योग्य होना चाहिए। ऐसे अयोग्य संदर्भों को हल करना होगा, और ऐसा ही होता है:
- सबसे पहले, एक ही नाम की एक वस्तु की तलाश करें और उपयोगकर्ता के डिफ़ॉल्ट स्कीमा के तहत टाइप करें, जिसके तहत सत्र स्थापित किया गया था (जैसे
jsmith
)। यदि पाया जाता है, तो उस उदाहरण का उपयोग किया जाता है।
- अन्यथा, स्कीमा के तहत एक ही नाम और प्रकार की वस्तु देखें
dbo
।
इसके कई प्रभाव हैं:
- यदि संदर्भ स्कीमा-योग्य है, तो अधिकांश समय, दो लुकअप को एक ही लुकअप के बजाय संदर्भ को हल करने की आवश्यकता होती है।
- निष्पादन योजना जब क्वेरी / संग्रहीत कार्यविधि / उपयोगकर्ता-निर्धारित फ़ंक्शन से बाध्य होती है, तो उसे कैश और पुन: उपयोग नहीं किया जा सकता है।
अंतिम प्रभाव जो आपको केवल तभी मिलेगा - जब कुछ टूटता है, तो यह है कि विभिन्न उपयोगकर्ता किसी दिए गए क्वेरी या संग्रहीत कार्यविधि से भिन्न परिणाम प्राप्त कर सकते हैं। select * from foo join bar
डीबी के मालिक के रूप में मेरे लिए कुछ ठीक हो सकता है; यह उस उपयोगकर्ता के लिए तोड़ा जा सकता है jsmith
, जिसने अनजाने में या नहीं, एक ही डेटाबेस में foo
अपने स्वयं के स्कीमा ( jsmith.foo
) के तहत एक तालिका बनाई ।
इस कारण से, create
और drop
स्टेटमेंट को ऑब्जेक्ट के नाम को स्कीमा-क्वालिफाई किया जाना चाहिए या बनाया जा रहा है।