अस्थायी तालिकाओं (#tmp) और तालिका चर (@tmp) के बीच कुछ अंतर हैं, हालांकि tempdb का उपयोग करना उनमें से एक नहीं है, जैसा कि नीचे MSDN लिंक में बताया गया है।
एक सामान्य नियम के रूप में, डेटा की छोटी से मध्यम मात्रा और सरल उपयोग परिदृश्यों के लिए आपको तालिका चर का उपयोग करना चाहिए। (यह निश्चित रूप से बहुत सारे अपवादों के साथ एक बहुत व्यापक दिशानिर्देश है - नीचे और निम्नलिखित लेख देखें।)
उनके बीच चयन करते समय कुछ बातों पर ध्यान देना चाहिए:
-
अस्थायी तालिकाएँ वास्तविक तालिकाएँ हैं इसलिए आप क्रिएट इंडेक्स आदि जैसे काम कर सकते हैं। यदि आपके पास बड़ी मात्रा में डेटा है जिसके लिए इंडेक्स द्वारा एक्सेस करना तेज़ होगा तो अस्थायी टेबल एक अच्छा विकल्प है।
-
प्राथमिक कुंजी या अद्वितीय बाधाओं का उपयोग करके तालिका चर में अनुक्रमणिका हो सकती है। (यदि आप एक गैर-अद्वितीय अनुक्रमणिका चाहते हैं तो केवल प्राथमिक कुंजी कॉलम को अद्वितीय बाधा में अंतिम कॉलम के रूप में शामिल करें। यदि आपके पास एक अद्वितीय कॉलम नहीं है, तो आप एक पहचान कॉलम का उपयोग कर सकते हैं।) SQL 2014 में गैर-अद्वितीय अनुक्रमणिका भी हैं ।
-
तालिका चर लेन-देन में भाग नहीं लेते हैं और
SELECT
s परोक्ष रूप सेNOLOCK
. के साथ हैं . लेन-देन व्यवहार बहुत मददगार हो सकता है, उदाहरण के लिए यदि आप किसी प्रक्रिया के बीच में रोलबैक करना चाहते हैं तो उस लेन-देन के दौरान पॉप्युलेट किए गए तालिका चर अभी भी पॉप्युलेट होंगे! -
अस्थायी तालिकाओं के परिणामस्वरूप संग्रहीत कार्यविधियाँ पुन:संकलित की जा सकती हैं, शायद अक्सर। तालिका चर नहीं होंगे।
-
आप SELECT INTO का उपयोग करके एक अस्थायी तालिका बना सकते हैं, जो लिखने में तेज़ हो सकती है (तदर्थ क्वेरी के लिए अच्छा) और आपको समय के साथ बदलते डेटाटाइप से निपटने की अनुमति दे सकती है, क्योंकि आपको अपनी अस्थायी तालिका संरचना को पहले से परिभाषित करने की आवश्यकता नहीं है।
-
आप फ़ंक्शन से टेबल वेरिएबल्स को वापस पास कर सकते हैं, जिससे आप तर्क को बहुत आसान बना सकते हैं और पुन:उपयोग कर सकते हैं (उदाहरण के लिए किसी स्ट्रिंग को किसी मनमानी सीमांकक पर मानों की तालिका में विभाजित करने के लिए फ़ंक्शन बनाएं)।
-
उपयोगकर्ता-परिभाषित कार्यों के भीतर तालिका चर का उपयोग करना उन कार्यों को अधिक व्यापक रूप से उपयोग करने में सक्षम बनाता है (विवरण के लिए फ़ंक्शन दस्तावेज़ बनाएं देखें)। यदि आप कोई फ़ंक्शन लिख रहे हैं, तो आपको अस्थायी तालिकाओं पर तालिका चर का उपयोग करना चाहिए, जब तक कि कोई अनिवार्य आवश्यकता न हो।
-
टेबल वेरिएबल और टेम्प टेबल दोनों को tempdb में स्टोर किया जाता है। लेकिन तालिका चर (2005 से) वर्तमान डेटाबेस बनाम अस्थायी तालिकाओं के संयोजन के लिए डिफ़ॉल्ट हैं जो tempdb (रेफरी) के डिफ़ॉल्ट संयोजन को लेते हैं। इसका मतलब है कि यदि आप अस्थायी तालिकाओं का उपयोग कर रहे हैं तो आपको संयोजन के मुद्दों के बारे में पता होना चाहिए और आपका डीबी संयोजन tempdb से अलग है, यदि आप अपने डेटाबेस में डेटा के साथ अस्थायी तालिका में डेटा की तुलना करना चाहते हैं तो समस्याएं उत्पन्न होती हैं।
-
ग्लोबल टेंप टेबल्स (##tmp) एक अन्य प्रकार की टेम्प टेबल है जो सभी सेशन और यूजर्स के लिए उपलब्ध है।
कुछ और पढ़ना:
-
dba.stackexchange.com पर मार्टिन स्मिथ का शानदार जवाब
-
दोनों के बीच अंतर पर MSDN अक्सर पूछे जाने वाले प्रश्न:https://support.microsoft.com/en-gb/kb/305977
-
एमडीएसएन ब्लॉग आलेख:https://docs.microsoft.com/archive/blogs/sqlserverstorageengine/tempdb-table-variable-vs-local-temporary-table
-
लेख:https://searchsqlserver.techtarget.com/tip/Temporary-tables-in-SQL-Server-vs-table-variables
-
अस्थायी तालिकाओं और अस्थायी चरों के अप्रत्याशित व्यवहार और प्रदर्शन निहितार्थ:SQLblog.com पर पॉल व्हाइट