Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

वर्चर (8000) पर वर्चर (500) का कोई फायदा है?

एक उदाहरण जहां इससे फर्क पड़ सकता है वह यह है कि यह एक प्रदर्शन अनुकूलन को रोक सकता है जो ट्रिगर के साथ तालिका में पंक्ति संस्करण जानकारी जोड़ने से बचता है।

इसे पॉल व्हाइट ने यहां कवर किया है

<ब्लॉकक्वॉट>

संग्रहीत डेटा का वास्तविक आकार महत्वहीन है - यह क्षमता का आकार है जो मायने रखता है।

इसी तरह अगर 2016 से मेमोरी ऑप्टिमाइज्ड टेबल का उपयोग कर रहे हैं तो एलओबी कॉलम या कॉलम चौड़ाई के संयोजन का उपयोग करना संभव है जो संभावित रूप से इनरो सीमा से अधिक हो सकता है लेकिन जुर्माना के साथ।

<ब्लॉकक्वॉट>

(अधिकतम) कॉलम हमेशा ऑफ-पंक्ति संग्रहीत किए जाते हैं। अन्य स्तंभों के लिए, यदि तालिका परिभाषा में डेटा पंक्ति का आकार 8,060 बाइट्स से अधिक हो सकता है, तो SQL सर्वर सबसे बड़े चर-लंबाई वाले कॉलम को ऑफ-पंक्ति में धकेलता है। फिर, यह आपके द्वारा वहां संग्रहीत डेटा की मात्रा पर निर्भर नहीं करता है।

यह स्मृति खपत और प्रदर्शन पर बड़ा नकारात्मक प्रभाव डाल सकता है

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

SQL सर्वर इंजन में वापस एक समान मामला यह है कि SORT के लिए आवंटित करने के लिए स्मृति अनुदान की गणना करते समय संचालन SQL सर्वर मानता है कि 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जाँच करें कि क्या किसी स्ट्रिंग में संग्रहीत कार्यविधि का उपयोग करके SQL Server 2005 में एक सबस्ट्रिंग है

  2. एमएस एसक्यूएल का उपयोग करके अपडेट और ऑर्डर कैसे करें

  3. SQL सर्वर में UTC मिलीसेकंड को DATETIME में कनवर्ट करें

  4. SQL सर्वर में @@ TEXTSIZE क्या है?

  5. Azure डेटा स्टूडियो क्या है?