2008-10-02 16 views
6

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

क्या प्राथमिक कुंजी के रूप में CHAR() या VARCHAR() का उपयोग करना बेहतर है?

उत्तर

9

रूप में अच्छी तरह सिर्फ एक यूजर आईडी सूचकांक का उपयोग कर सकते हैं, यह बहुत तेजी से है बनाम चार/varchar मिलती है के लिए। यह जोड़ने के लिए दो सेकंड लगते हैं कि अब आपको बहुत समय बचा सकता है यदि आपको गलती से अपनी स्कीमा की कार्यक्षमता का विस्तार करना है।

कुछ नुकसान में सोचने के लिए के बारे में:

  • हम एक भविष्य की तारीख में कुछ तालिकाओं जोड़ने के लिए, क्या हुआ अगर किसी को एक उपयोगकर्ता नाम बदलना चाहता है कहा?
  • कहना एप्लिकेशन हमें लगता है कि तब और अधिक सफल है, और हम अनुकूलन को देखने के लिए है, तो आप वास्तव में इस बिंदु पर अपने स्कीमा फिर से करना एक varchar'ed सूचकांक की भूमि के ऊपर कम करने के लिए करना चाहते हैं?
+0

सहमति हुई थी, तो आप शायद कुछ के लिए एक प्रयोक्ता आईडी चाहते हैं और यह किसी में एक उपयोगकर्ता नाम के भंडारण की तुलना में एक बहुत छोटे तालिकाओं में शामिल हो गए है। –

0

मुझे नहीं लगता कि CHAR किसी भी MySQL डेटाबेस में बहुत अधिक उपयोग किया गया है जिस पर मैंने काम किया है। मैं VARCHAR

एक चार्ज (30) के लिए उदाहरण के लिए, पूरे 30 वर्ण तालिका में संग्रहीत किए जाते हैं जिसका अर्थ है कि प्रत्येक प्रविष्टि एक ही स्थान ले लेगी, भले ही आपका उपयोगकर्ता नाम केवल 10 वर्ण लंबा हो।

VARCHAR (30) का उपयोग करते हुए यह केवल पर्याप्त जगह का उपयोग स्ट्रिंग आपके द्वारा दिया गया स्टोर करने के लिए होगा।

एक छोटी सी मेज इस पर अभ्यस्त ज्यादा फर्क है, लेकिन एक बड़ी मेज पर VARCHAR इसे छोटे समग्र रखने के लिए साबित करना चाहिए।

+1

इस मामले में मुझे लगता है कि CHAR अधिक समझ में आता है। यह एक निश्चित लंबाई क्षेत्र है। यदि तालिका में सभी फ़ील्ड निश्चित लंबाई हैं, तो क्वेरी तेजी से चली जाएगी क्योंकि MySQL को गणना नहीं करनी चाहिए कि अगले रिकॉर्ड कहां से शुरू होते हैं। आजकल जगह सस्ता है, मैं अधिक गति के लिए यहां थोड़ी सी जगह का व्यापार करूंगा। – DreamWerx

+0

एक स्ट्रिंग –

5

मैं कठिन काम करेगा एक पी के रूप में CHAR() या VARCHAR() का उपयोग नहीं करने के लिए, लेकिन इसके बजाय एक auto_increment के साथ एक पूर्णांक का उपयोग करें। यदि आवश्यक हो तो यह आपको बाल तालिका में उस उपयोगकर्ता_आईडी का उपयोग करने की अनुमति देता है और पीके पर प्रश्न तेजी से होना चाहिए। यदि आपको या तो CHAR() या VARCHAR() का उपयोग करना है, तो मैं CHAR() के साथ जाऊंगा क्योंकि यह एक निश्चित चौड़ाई है।

मुझे 100% यकीन नहीं है कि MySQL VARCHAR() के साथ कैसे व्यवहार करता है लेकिन अधिकांश डेटाबेस इंजनों को इंजन को यह जानने में मदद करने के लिए हुड के नीचे कुछ जादू करना पड़ता है जहां VARCHAR() फ़ील्ड समाप्त होता है और अगला फ़ील्ड कहां से शुरू होता है , एक चार्ज() इसे सीधे आगे बढ़ाता है और इंजन को ज्यादा सोचने से रोकता है।

1

[मैं एक पी के रूप में CHAR() या VARCHAR() का उपयोग नहीं करने के लिए कड़ी मेहनत करते हैं, लेकिन बजाय एक auto_increment के साथ एक पूर्णांक का उपयोग करें।] +1

उपयोगकर्ता नाम की एक अद्वितीय बाधा डाल लेकिन पूर्णांक का उपयोग क्षेत्र पीके

+0

के साथ मिलान करते समय CHAR पर पिछली जगहों के लिए देखें, यह सवाल पूछने का उत्तर नहीं है, यह एक सुझाव है और यह खोज को हल नहीं करता है –

+0

मुझे लगता है कि मेरा मुद्दा यह था कि सवाल एक समाधान है उप-इष्टतम है, इस वेबसाइट का बिंदु ज्ञान प्रसार के लिए है। यह भी अजीब बात है कि एक ही समय में पोस्ट किए गए समान उत्तरों वोट नहीं मिला। – RhysC

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