2009-05-03 12 views
7

मैं अपेक्षाकृत बड़ी डीबी तालिका (700K पंक्तियों) के साथ प्रोजेक्ट पर काम कर रहा हूं।बड़ी तालिकाओं के लिए MySQL प्राथमिक कुंजी कॉलम प्रकार

गलती, मैंने डीबी स्कीमा को डिजाइन करते समय बनाया है। जब पंक्तियां बढ़ रही थीं, तो मुझे आईडी के कॉलम प्रकार को बड़ा करना था (x)।

अब यह बड़ा है (44)। मुझे उच्च एक्स मान सेट करने से डर है क्योंकि मैंने सोचा था कि यह प्रदर्शन को धीमा कर सकता है। शायद मैं गलत हूं ..

कृपया समस्या को हल करने में मेरी मदद करें।

मैं किस कॉल प्रकार को एक बार सेट कर सकता हूं और इस मुद्दे को भूल सकता हूं?

डीबी स्कीमा डिज़ाइन के क्षेत्र में मुझे बेहतर क्या सीखना चाहिए?

उत्तर

13

जब आप BIGINT(44) के रूप में कॉलम बनाते हैं तो "44" प्रदर्शन चौड़ाई है - यह उन मूल्यों की सीमा को प्रभावित नहीं करता है जिन्हें आप स्टोर कर सकते हैं या जिस गति पर उन्हें पुनर्प्राप्त किया जाता है।

एक ऑटो-वृद्धिशील आईडी के लिए आप UNSIGNED नंबर का उपयोग करना चाहते हैं, उदा। BIGINT(44) UNSIGNED। यह मूल्यों की सीमा को दोगुना कर देगा और एक अतिरिक्त बाधा जोड़ देगा, जो आमतौर पर एक अच्छी बात है।

एक हस्ताक्षरित आईएनटी 4,294,967,295 तक स्टोर करेगा, एक हस्ताक्षरित बिगिनट 18,446,744,073,709,551,615 तक स्टोर करेगा - आप जल्द ही इसे भरने वाले नहीं हैं।

आप यह नहीं कहते कि आपकी अधिकतम आईडी कितनी तेज़ी से बढ़ रही है - यदि आप कई पंक्तियां नहीं डाल रहे हैं तो आपको UNSIGNED INT के साथ चिपकना चाहिए क्योंकि इसमें कम स्थान लगता है।

1

मुझे लगता है कि किसी भी प्राथमिक कुंजी को डिफ़ॉल्ट रूप से हस्ताक्षरित किया जाएगा। किसी भी मामले में, प्राथमिक कुंजी के लिए नकारात्मक संख्याओं का उपयोग करना सबसे अच्छा होता है, और सामान तोड़ता है।

+0

क्या आप अधिक विशिष्ट हो सकते हैं? "सामान तोड़ता है" बहुत अस्पष्ट है। यह वास्तव में क्या टूटता है? – Nobody

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