2010-04-18 9 views
5

क्या यह यूयूआईडी का उपयोग MySQL में प्राथमिक कुंजी के रूप में करने के लिए समझ में आता है?MySQL में प्राथमिक कुंजी: INT (n) या UUID Varchar के रूप में (36)

हाथ पूछताछ की परेशानी के बगल में नियमित आईएनटी के बजाय यूयूआईडी का उपयोग करने के पेशेवर और विपक्ष क्या होंगे?

+0

आप यूयूआईडी का उपयोग क्यों करते हैं? – Sarfraz

उत्तर

6

UUIDs के प्रमुख नकारात्मक पक्ष आप उनके बारे में पहले बनाने के लिए है कि अगर आप बाद में आगे उपयोग के लिए रिकॉर्ड करने के लिए वापस उल्लेख करने के लिए चाहते हैं (यानी: निर्भर विदेशी keyed तालिकाओं में बच्चे को रिकॉर्ड जोड़ने):

INSERT INTO table (uuidfield, someotherfield) VALUES (uuid(), 'test')); 

आपको यह देखने नहीं देगा कि नया यूयूआईडी मूल्य क्या है, और चूंकि आप नियमित ऑटो_इनक्रमेंटेड प्राथमिक कुंजी का उपयोग नहीं कर रहे हैं, इसलिए आप इसे पुनर्प्राप्त करने के लिए last_insert_id() का उपयोग नहीं कर सकते हैं। ,

SELECT @newuid := uuid(); 
INSERT INTO table (uuidfield, someotherfield) VALUES (@newuid, 'test'); 
INSERT INTO childtable ..... VALUES (@newuid, ....); 
+0

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

+4

यह सच है, लेकिन यूयूआईडी का उपयोग करने का मुख्य लाभ यह है कि आप उन्हें कहीं भी बना सकते हैं। यदि आपको रिकॉर्ड डालने पर यूयूआईडी की आवश्यकता होती है, तो बस इसे क्लाइंट-साइड जेनरेट करें, और डेटाबेस को उत्पन्न करने के बजाए इसे अपने 'INSERT' कथन में स्पष्ट रूप से शामिल करें। –

4

प्रो मैं सोच सकता हूं कि आपकी आईडी न केवल आपकी तालिका में बल्कि आपके डेटाबेस की हर दूसरी तालिका पर अद्वितीय होगी। इसके अलावा, यह दुनिया के किसी भी डेटाबेस से किसी भी तालिका के बीच अद्वितीय होना चाहिए।

यदि आपकी तालिका अर्थपूर्ण को उस सुविधा की आवश्यकता है, तो यूयूआईडी का उपयोग करें। अन्यथा, केवल एक सादा आईएनटी आईडी (तेज़, आसान हैडलर, छोटे) का उपयोग करें।

4

यूयूआईडी का विपक्ष यह है कि यह थोक है और इसलिए खोज करने में थोड़ा धीमा है। प्रत्येक विज्ञापन की क्वेरी के लिए एक लंबी हेक्स स्ट्रिंग में टाइप करना मुश्किल है। यह एक ऐसी आवश्यकता को हल करता है जो आपके पास नहीं हो सकता है, यानी बहु-सर्वर विशिष्टता।

वैसे, INT(n) हमेशा MySQL में 32-बिट पूर्णांक होता है, (n) तर्क के आकार या अनुमत मानों की सीमा के साथ कुछ लेना देना नहीं है। यह केवल एक प्रदर्शन चौड़ाई संकेत है।

यदि आपको 32-बिट प्रदान करने वाले मानों की एक श्रृंखला के साथ पूर्णांक की आवश्यकता है, तो BIGINT का उपयोग करें।

7

देखने की मेरी बात से UUID का उपयोग कर MySQL में प्राथमिक कुंजी बुरा विचार है, अगर हम बड़े डेटाबेस (और आवेषण की बड़ी राशि के बारे में बात के रूप में: आप एक दो चरण की प्रक्रिया में यह करने के लिए होगा)।

MySQL हमेशा क्लस्टर के रूप में प्राथमिक कुंजी बनाता है, और इसे बंद करने का कोई विकल्प नहीं है।

इसे ध्यान में रखते हुए, जब आप गैर अनुक्रमिक पहचानकर्ताओं (यूयूआईडी) के साथ बड़ी मात्रा में रिकॉर्ड डालते हैं, तो डेटाबेस खंडित हो जाता है, और प्रत्येक नए सम्मिलन में अधिक समय लगेगा।

सलाह: GUIDs के साथ PostgreSQL/MS-SQL/Oracle का उपयोग करें। MySQL के लिए ints (bigints) का उपयोग करें।

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