2010-07-30 18 views
5

के बीच प्रदर्शन varchar(1) और char(1) के बीच कोई प्रदर्शन अंतर है? कौन सी आरडीबीएमएस इन दो डेटाटाइप और आकार को विभिन्न तरीकों से संभालती है?वर्चर (1) बनाम चार (1)

उत्तर

3

अंतर ज्यादातर मामलों में नगण्य हो जाएगा। स्थानों पर जहां यह एक बड़ा अंतर साबित होगा, टेबल संरचना और सूचकांक डिजाइन की तरह में अपने प्रदर्शन उन्मुख डिजाइन प्रयासों ध्यान लगाओ। तार्किक डिजाइन और शारीरिक डिजाइन:

यह दो परतों में डिजाइन प्रयास विभाजित करने के लिए मदद करता है।
प्रदर्शन उन्मुख प्रयास के अधिकांश दूसरे चरण, शारीरिक डिजाइन में है।

तार्किक डिजाइन में, लचीलापन प्रदर्शन श्रेष्ठ माना जाता। इसके अलावा जब यह नहीं करता है।

+1

लचीलापन लगभग प्रदर्शन कभी नहीं करना चाहिए! मैं गारंटी देता हूं कि उपयोगकर्ता लचीलापन पर प्रदर्शन करना चाहता है, भले ही वे कहते हैं कि वे लचीलापन चाहते हैं। – HLGEM

1

यह शायद ही, मायने रखती है जब से तुम दोनों ही मामलों में 1 बाइट का उपयोग कर रहे हैं।

लेकिन लंबी कहानी छोटी, वर्कर परिवर्तनीय आकार & चार निश्चित आकार है। बड़ी मात्रा में यह भंडारण स्थान में एक फर्क कर सकते हैं और साथ ही गणना समय प्रभावित करते हैं।

प्रदर्शन बुद्धिमान, चार का उपयोग करता है, तो डेटा लंबाई तय किया जा रहा है। यदि आप अपने डेटा की अलग-अलग लंबाई के साथ लचीले हैं तो वर्कर का उपयोग करें।

+3

*** दोनों ही मामलों में नहीं 1 बाइट! *** - उदाहरण के लिए - MYSQL v5.0 दस्तावेज़ कहते हैं कि वर्चर (एम) के लिए वर्कर स्टोरेज आवश्यकताएं 'एल + 1 बाइट्स की आवश्यकता होती है यदि कॉलम मानों को 0 - 255 बाइट्स' की आवश्यकता होती है (जहां एल किसी दिए गए बाइट्स में वास्तविक लंबाई का प्रतिनिधित्व करता है स्ट्रिंग मान)। तो आप CHAR (1) के लिए 1 बाइट और VARCHAR (1) के लिए 2 बाइट्स का उपयोग करेंगे। इस मामले में आप इस कॉलम के लिए 100% अधिक संग्रहण स्थान का उपयोग कर रहे हैं। उपयोग की स्थिति के आधार पर यह एक बड़ा सौदा हो सकता है या नहीं भी हो सकता है। हालांकि यह उचित है, हालांकि अंतर को इंगित करने योग्य मूल्य। (देखें http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html) –

2

जहां तक ​​ओरेकल का सवाल है ....

CHAR (2) हमेशा दो बाइट्स/भंडारण के पात्रों का प्रयोग करेंगे। VARCHAR2 (2) केवल एक का उपयोग कर सकते हैं। तो सामान्य मामला CHAR के बजाय VARCHAR2 का उपयोग करना है।

अभ्यास में आप एक अंतर प्रदर्शन एक एक चरित्र स्तंभ के लिए बुद्धिमान नहीं देखना चाहिए।

वहाँ कभी नहीं CHAR से एक कभी नहीं एक लाभ है के बाद से, मैं हमेशा VARCHAR2 का उपयोग करें।

+4

वर्चर को स्ट्रिंग की लंबाई के लिए कम से कम एक बाइट स्टोर करना होगा, हालांकि, आप 1 बाइट से कम कभी नहीं हो सकता है। – Gabe

0

VARCHAR और CHAR के MySQL के विवरण को पढ़ने के बाद मेरी समझ यह है कि यदि आप डेटा हमेशा एक ही लंबाई के लिए जा रहे हैं, तो CHAR संभावित रूप से आपको डेटा का एक बाइट बचा सकता है क्योंकि VARCHAR को बाइट को अलग करने की आवश्यकता होती है डेटा को कितनी देर तक रिकॉर्ड करने के लिए वास्तविक डेटा से। हालांकि, अगर आप डेटा कर रहे हैं एक निरंतर लंबाई नहीं है और आप अंतरिक्ष विचारों की सोच रहे हैं, यह भावना है कि अंतरिक्ष में क्योंकि CHAR हमेशा घोषित लंबाई के हर बिट के लिए एक बाइट का उपयोग करेगा VARCHAR उपयोग करने के लिए कुछ भी है कि क्या वहाँ होगा ।

अंत में, हालांकि, यह संभवतः उस अंतर को इतना बड़ा नहीं बनाता है क्योंकि इसमें शामिल डेटा की मात्रा काफी छोटी है।

यहां मुझे अपनी जानकारी मिली है: http://dev.mysql.com/doc/refman/5.0/en/char.html यदि आप लिंक का पालन करते हैं, तो छोटे चार्ट पर विशेष ध्यान दें क्योंकि यह उदाहरण देता है कि डेटा VARCHAR बनाम CHAR के साथ कैसे संभाला जाएगा।

3

एमएस एसक्यूएल वर्चर (1) में भंडारण के तीन बाइट्स का उपयोग करता है और CHAR (1) भंडारण के एक बाइट का उपयोग करता है।

CHAR (1) प्रसंस्करण और भंडारण में VARCHAR (1) से अधिक कुशल है।

वाराचर पर 'ब्रेकवेन' बिंदु परिवर्तनीय लंबाई डेटा का उपयोग करते हुए 3 वर्णों से अधिक होगा।

तो निश्चित लंबाई का उपयोग कर तो CHAR हमेशा दो बाइट्स से अधिक सक्षम है।

REF: http://msdn.microsoft.com/en-gb/library/ms176089.aspx

0

ओरेकल

लिए VARCHAR2 (1) और CHAR (1) सभी पहलुओं में समान हैं। उस मामले में CHAR प्रकार का उपयोग करने के लिए अनिवार्य कारण नहीं है, और किसी भी भ्रम से बचने के लिए, मैं CHAR (1) फ़ील्ड के लिए भी "नहीं कहता हूं"।

संदर्भ: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2668391900346844476

संबंधित मुद्दे