Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या MySQL में MEDIUMINT से बचना चाहिए?

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])
                );
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अनुक्रमण बूलियन फ़ील्ड

  2. EXISTS बनाम IN के साथ उपश्रेणियाँ - MySQL

  3. MySQL में डुप्लीकेट रिकॉर्ड डालने से कैसे बचें?

  4. MySQL विदेशी कुंजी त्रुटि 1005 त्रुटि 150 प्राथमिक कुंजी विदेशी कुंजी के रूप में

  5. Mysql आप क्लस्टर्ड इंडेक्स कैसे बनाते हैं?