एक उदाहरण जहां यह एक अंतर बना सकता है कि यह प्रदर्शन अनुकूलन को रोक सकता है जो ट्रिगर के बाद तालिकाओं के साथ पंक्ति संस्करण जानकारी जोड़ने से बचता है।
यह यहाँ SQL कीवी द्वारा कवर किया गया है
संग्रहीत डेटा का वास्तविक आकार स्थिर है - यह संभावित आकार है जो मायने रखता है।
इसी तरह अगर 2016 के बाद से मेमोरी ऑप्टिमाइज़्ड टेबल्स का उपयोग किया जा रहा है, तो एलओबी कॉलम या कॉलम चौड़ाई के संयोजन का उपयोग करना संभव हो गया है जो संभावित रूप से एरो सीमा से अधिक हो सकता है लेकिन एक दंड के साथ।
(मैक्स) कॉलम हमेशा ऑफ-रो स्टोर किए जाते हैं। अन्य स्तंभों के लिए, यदि तालिका परिभाषा में डेटा पंक्ति का आकार 8,060 बाइट्स से अधिक हो सकता है, तो SQL सर्वर सबसे बड़ी परिवर्तनशील-लंबाई वाले कॉलम (एस) को बंद कर देता है। फिर, यह आपके द्वारा संग्रहीत डेटा की मात्रा पर निर्भर नहीं करता है।
यह स्मृति की खपत और प्रदर्शन पर एक बड़ा नकारात्मक प्रभाव डाल सकता है
एक अन्य मामला जहां कॉलम की चौड़ाई घोषित करने से अधिक फर्क पड़ सकता है, यदि तालिका को कभी भी SSIS का उपयोग करके संसाधित किया जाएगा। चर लंबाई (गैर BLOB) कॉलम के लिए आवंटित की गई मेमोरी निष्पादन ट्री में प्रत्येक पंक्ति के लिए तय की गई है और अधिकतम लंबाई घोषित किए गए कॉलम के अनुसार है जो मेमोरी बफ़र्स (उदाहरण) के अक्षम उपयोग को जन्म दे सकती है । जब भी SSIS पैकेज डेवलपर स्रोत से छोटे कॉलम आकार की घोषणा कर सकता है, यह विश्लेषण सबसे अच्छा किया जाता है और इसे वहां लागू किया जाता है।
SQL सर्वर इंजन में ही एक ऐसा ही मामला है कि जब SORTSQL सर्वर संचालन के लिए आवंटित करने के लिए स्मृति अनुदान की गणना करता है कि varchar(x)कॉलम औसत उपभोग x/2बाइट्स होगा।
यदि आपके अधिकांश varcharकॉलम इससे अधिक भरे हुए हैं, तो इससे sortऑपरेशनों को गति मिल सकती है tempdb।
आपके मामले में यदि आपके varcharकॉलम को 8000बाइट्स के रूप में घोषित किया गया है, लेकिन वास्तव में इससे बहुत कम सामग्री है, तो आपकी क्वेरी को स्मृति आवंटित की जाएगी कि इसकी आवश्यकता नहीं है, जो स्पष्ट रूप से अक्षम है और स्मृति अनुदान के लिए इंतजार कर सकता है।
यह SQL वर्कशॉप वेबकास्ट 1 के भाग 2 में शामिल है जिसे यहां से डाउनलोड किया जा सकता है या नीचे देखें।
use tempdb;
CREATE TABLE T(
id INT IDENTITY(1,1) PRIMARY KEY,
number int,
name8000 VARCHAR(8000),
name500 VARCHAR(500))
INSERT INTO T
(number,name8000,name500)
SELECT number, name, name /*<--Same contents in both cols*/
FROM master..spt_values
SELECT id,name500
FROM T
ORDER BY number

SELECT id,name8000
FROM T
ORDER BY number
