2011-02-08 12 views
5

मैंने अभी this question के स्वीकृत उत्तर को पढ़ा है, जिसने मुझे इस प्रश्न के साथ छोड़ा था।यदि आपके पास एक ही तालिका में VARCHAR है तो CHAR का उपयोग करने में कोई बात है?

यहाँ है कि इसका जवाब एक उद्धरण है:

"लेकिन जब से तुम MySQL के साथ इस सवाल में चिह्नित है, मैं एक MySQL विशेष टिप उल्लेख करेंगे: आपकी क्वेरी परोक्ष अस्थायी तालिका, उदाहरण के लिए, जबकि छँटाई या GROUP BY उत्पन्न करता है , VARCHAR फ़ील्ड को CHAR में फिक्स्ड-चौड़ाई वाली पंक्तियों के साथ काम करने का लाभ प्राप्त करने के लिए परिवर्तित किया गया है। यदि आप उस डेटा के लिए VARCHAR(255) फ़ील्ड्स का उपयोग करते हैं, जो लंबे समय तक होने की आवश्यकता नहीं है, तो यह अस्थायी तालिका को बहुत बड़ा बना सकता है। "

जैसा कि मैं इसे समझता हूं, CHAR का लाभ यह है कि आपको निश्चित चौड़ाई वाली पंक्तियां मिलती हैं, इसलिए VARCHAR उसी तालिका में गड़बड़ नहीं है? क्या आपके पास CHAR का उपयोग करने के कोई फायदे हैं जब आपके पास एक ही तालिका में VARCHAR है?

CHAR साथ तालिका::

CREATE TABLE address (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    street VARCHAR(100) NOT NULL, 
    postcode CHAR(8) NOT NULL, 
    PRIMARY KEY (id) 
); 

टेबल के बिना CHAR:

CREATE TABLE address (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    street VARCHAR(100) NOT NULL, 
    postcode VARCHAR(8) NOT NULL, 
    PRIMARY KEY (id) 
); 

CHAR साथ तालिका CHAR बिना तालिका के अलावा कोई बेहतर प्रदर्शन करेगा


यहाँ एक उदाहरण है , और यदि हां, तो क्या स्थितियों?

+0

संभावित डुप्लिकेट - http://stackoverflow.com/questions/3408930/does-anyone-have-considerable-proof-that-char-is-faster-than-varchar – ocodo

+0

'char' तालिका कम जगह का उपयोग करेगी, क्योंकि इसमें प्रत्येक रिकॉर्ड में "पोस्टकोड स्ट्रिंग की लंबाई" के लिए अतिरिक्त फ़ील्ड नहीं है। –

+0

@ स्लोमोजो: यह सवाल इस बात के बारे में है कि क्या 'चार्ज' का कोई भी फायदे है और यही वह नहीं है जो मैं पूछ रहा हूं। –

उत्तर

2

"VARCHAR" मूल रूप से फ़ील्ड के लिए अधिकतम लंबाई निर्धारित करता है और केवल उस डेटा को संग्रहीत करता है जो उसमें दर्ज होता है, इस प्रकार अंतरिक्ष पर बचत करता है। "CHAR" प्रकार की एक निश्चित लंबाई है, इसलिए यदि आप "CHAR(100)" सेट करते हैं, तो सामग्री के बारे में ध्यान दिए बिना 100 वर्ण की जगह का उपयोग किया जाएगा।

एक बार जब आप एक स्पीड लाभ प्राप्त करेंगे, तो आपके रिकॉर्ड में कोई चर लंबाई नहीं है ("VARCHAR", "TEXT", आदि)। आप देख सकते हैं कि आंतरिक रूप से आपके सभी "CHAR" फ़ील्ड को "VARCHAR" में बदल दिया गया है जैसे ही एक चर लंबाई लंबाई प्रकार जोड़ा जाता है, MySQL द्वारा।

इसके अलावा "CHAR" अंतरिक्ष संग्रहण बिंदु से कम कुशल है, लेकिन खोज और जोड़ने के लिए अधिक कुशल है। यह तेज़ है क्योंकि डेटाबेस को केवल रिकॉर्ड पढ़ने के बाद भागों को पढ़ने के बजाय रिकॉर्ड प्राप्त करने के लिए ऑफ़सेट मान पढ़ना पड़ता है। और निश्चित लंबाई के रिकॉर्ड विखंडन को कम कर देंगे, क्योंकि नए रिकॉर्ड के लिए हटाए गए रिकॉर्ड स्थान का पुन: उपयोग किया जा सकता है।

आशा है कि यह मदद करता है।

+0

क्या आप कह रहे हैं कि पोस्टकोड को 'वचर' के रूप में माना जाएगा क्योंकि सड़क 'वचर' है? क्या यह आंतरिक रूप से होगा या MySQL मुझे बताएगा कि मेरा 'CHAR' फ़ील्ड अब' वचर 'फ़ील्ड है? –

+0

@Erik - यह आंतरिक रूप से होगा। जवाब संपादित किया। –

+0

मेरे पास कोई वास्तविक सबूत नहीं है कि आप जो कह रहे हैं वह सत्य है, लेकिन यह ऊपर है, यह समझ में आता है और कोई भी विरोध नहीं करता है, इसलिए मैं इसे अपने उत्तर के रूप में स्वीकार करूंगा। –

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