InnoDB съхранява MEDIUMINT като стойност от три байта. Но когато MySQL трябва да извърши някакво изчисление, трите байта MEDIUMINT се преобразуват в осем байта без знак long int (предполагам, че никой не изпълнява MySQL на 32 бита в днешно време).
Има плюсове и минуси, но разбирате, че „Тъп е и е бавен, а кодът, който го прилага, е пълзящ ужас“ не е технически, нали?
Бих казал, че 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])
);
}