InnoDB MEDIUMINT को तीन बाइट्स मान के रूप में संग्रहीत करता है। लेकिन जब MySQL को कोई गणना करनी होती है तो तीन बाइट्स MEDIUMINT को आठ बाइट्स में अहस्ताक्षरित लॉन्ग इंट में बदल दिया जाता है (मुझे लगता है कि आजकल कोई भी 32 बिट्स पर MySQL नहीं चलाता है)।
पेशेवरों और विपक्ष हैं, लेकिन आप समझते हैं कि "यह गूंगा है, और यह धीमा है, और जो कोड इसे लागू करता है वह एक रेंगने वाला डरावना है" तर्क तकनीकी नहीं है, है ना?
मैं कहूंगा कि जब डिस्क पर डेटा का आकार महत्वपूर्ण होता है तो MEDIUMINT समझ में आता है। अर्थात। जब एक टेबल में इतने सारे रिकॉर्ड होते हैं कि एक बाइट अंतर भी (4 बाइट्स INT बनाम 3 बाइट्स MEDIUMINT) बहुत मायने रखता है। यह एक दुर्लभ मामला है, लेकिन संभव है।
mach_read_from_3 और mach_read_from_4 - InnoDB रिकॉर्ड से संख्याओं को पढ़ने के लिए InnoDB द्वारा उपयोग किए जाने वाले आदिम समान हैं। वे दोनों उलिंट लौटते हैं। मुझे यकीन है कि आप किसी . पर अंतर नहीं देखेंगे काम का बोझ।
बस कोड पर एक नज़र डालें:
ulint
mach_read_from_3(
/*=============*/
const byte* b) /*!< in: pointer to 3 bytes */
{
ut_ad(b);
return( ((ulint)(b[0]) << 16)
| ((ulint)(b[1]) << 8)
| (ulint)(b[2])
);
}
क्या आपको लगता है कि यह इससे बहुत धीमा है?
ulint
mach_read_from_4(
/*=============*/
const byte* b) /*!< in: pointer to four bytes */
{
ut_ad(b);
return( ((ulint)(b[0]) << 24)
| ((ulint)(b[1]) << 16)
| ((ulint)(b[2]) << 8)
| (ulint)(b[3])
);
}