स्तंभ के आकार का उपयोग आवश्यकता से अधिक बड़ा होना


16

मैं किसी और के साथ एक SQL सर्वर डेटाबेस बना रहा हूँ। तालिकाओं में से एक छोटी (6 पंक्तियाँ) डेटा के साथ है जो संभवतः स्थिर रहेगी। एक दूरस्थ संभावना है कि एक नई पंक्ति जोड़ी जाएगी। तालिका कुछ इस तरह दिखती है:

CREATE TABLE someTable (
    id int primary key identity(1,1) not null,
    name varchar(128) not null unique
    );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

मैं उस nameस्तंभ की चार लंबाई को देख रहा हूं , और मुझे लगता है कि उसके मूल्य शायद कभी बड़े नहीं होने वाले हैं, कहते हैं, 32 वर्ण, शायद 24 से भी बड़े नहीं हैं। क्या मेरे इस स्तंभ को बदलने का कोई फायदा है? उदाहरण के लिए varchar(32),?

इसके अलावा, 4, 8, 32, आदि के गुणकों में डिफ़ॉल्ट कॉलम साइज रखने का कोई फायदा है?

जवाबों:


15

क्वेरी प्रोसेसिंग के लिए मेमोरी आवंटित करते समय SQL सर्वर कॉलम की लंबाई का उपयोग करता है। तो, हां, संक्षेप में, आपको हमेशा डेटा के लिए उचित रूप से कॉलम आकार देना चाहिए ।

मेमोरी एलोकेशन कॉलम की घोषित लंबाई से गुणा की गई क्वेरी द्वारा लौटी पंक्तियों की संख्या पर आधारित होते हैं।

कहा कि, इस मामले में जहाँ आपको 6 पंक्तियाँ मिली हैं आप शायद समय से पहले अनुकूलन नहीं करना चाहते हैं। जब तक आप इस तालिका को लाखों पंक्तियों के साथ नहीं जोड़ते, तब तक एक varchar (24) और एक varchar (32), या यहां तक ​​कि एक varchar (128) के बीच एक बड़ा अंतर नहीं होगा।

आपका दूसरा प्रश्न द्विआधारी गुणकों पर कॉलम की लंबाई संरेखित करने के बारे में पूछता है। SQL सर्वर 8KB पृष्ठों में सभी स्तंभों की लंबाई की परवाह किए बिना, सभी डेटा की आवश्यकता नहीं है।


14

6 पंक्तियों के साथ, नहीं, कोई अवलोकन योग्य लाभ नहीं होगा। यह पूरी तालिका एक ही पृष्ठ पर फिट होगी, ताकि आप उस पृष्ठ पर अधिकतम संभावित स्थान को कम कर सकें, जबकि अभी भी उस पूरे पृष्ठ पर कब्ज़ा है, वह वास्तव में सभी व्यावहारिक अर्थों में अलग नहीं है।

बड़ी मेज पर, हालांकि, सही आकार महत्वपूर्ण है। कारण यह है कि मेमोरी अनुमान इस धारणा पर आधारित होगा कि प्रत्येक मूल्य 50% आबादी होगी। इसलिए यदि आपके पास varchar (128) है, तो हर मूल्य वास्तविक डेटा की परवाह किए बिना 64 बाइट्स पर कब्जा करने की उम्मीद करेगा, इसलिए मेमोरी ग्रांट्स 64b * पंक्तियों की संख्या होगी। यदि सभी मान 32 वर्ण या उससे कम के होंगे, तो यह एक varchar (64) या यहां तक ​​कि varchar (32) बनाना बेहतर विकल्प होगा। यदि मानों का एक बड़ा प्रतिशत कैप पर या उसके करीब है, तो आप इसके लिए अस्थिरता लेने के लिए चार का तर्क भी दे सकते हैं।

के रूप में 2 की शक्तियों पर छाया स्ट्रिंग स्ट्रिंग होने के लाभों के लिए, मुझे नहीं लगता कि आज के हार्डवेयर पर कोई भी किसी भी स्पष्ट लाभ को प्रदर्शित कर सकता है।

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