InnoDB menyimpan MEDIUMINT sebagai nilai tiga byte. Tetapi ketika MySQL harus melakukan perhitungan apa pun, tiga byte MEDIUMINT diubah menjadi delapan byte unsigned long int (saya berasumsi tidak ada yang menjalankan MySQL pada 32 bit saat ini).
Ada pro dan kontra, tetapi Anda mengerti bahwa alasan "Ini bodoh, dan lambat, dan kode yang mengimplementasikannya adalah horor perayapan" bukanlah alasan teknis, bukan?
Saya akan mengatakan MEDIUMINT masuk akal ketika ukuran data pada disk sangat penting. Yaitu. ketika sebuah tabel memiliki begitu banyak catatan sehingga perbedaan satu byte saja (4 byte INT vs 3 byte MEDIUMINT) sangat berarti. Ini agak jarang terjadi, tapi mungkin.
mach_read_from_3 dan mach_read_from_4 - primitif yang digunakan InnoDB untuk membaca angka dari catatan InnoDB serupa. Mereka berdua kembali ulint. Saya yakin Anda tidak akan melihat perbedaan pada apa pun beban kerja.
Lihat saja kodenya:
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])
);
}
Apakah menurut Anda ini jauh lebih lambat dari ini?
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])
);
}