Если я правильно понял, то на объём(размер) таблицы, который она занимает на диске компьютера, влияет тип таблицы, тип полей и т.д.
Вопрос
Как рассчитать объём таблицы?
Есть какие-нибудь калькуляторы для этих целей?
Точно объем таблицы можно посчитать только в случае, если размер записи фиксирован. Для этого надо, чтобы:
Все поля записи имели фиксированный размер. char(50)
всегда имеет размер 50 байт, в то время как varchar(50)
имеет размер от 1 до 51 байт.
Запись не содержала NULL-полей.
Размеры типов можно найти в документации по MySQL.
Типы nchar
, varchar
, varbinary
, tinyblob
, tinytext
, blob
, text
, mediumblob
, mediumtext
, longblob
, longtext
не имеют фиксированного размера. Если таблица содержит поля этих типов, точный её размер посчитать невозможно. Иногда размер можно посчитать приблизительно с высокой точностью, если понятно, какие данные будут хранится.
Все остальные типы имеют фиксированный размер. INT
4 байта, это просто. CHAR(7)
7 байт. Размер NUMERIC(12, 3)
посчитать сложнее, поскольку MySQL упаковывает каждые 9 десятичных цифр в 4 байта.
Каждая запись содержит служебный заголовок, который имеет размер от 5 байт. Если NULL-поле имеет значение NULL, оно не хранится в записи, просто выставляется бит в заголовке.
После того, как размер таблицы посчитан в байтах, можно прикинуть, сколько она занимает места на диске. Для скорости MySQL хранит данные большими страницами, блоками размером 4Кбайт или 8Кбайт. Если запись с заголовком занимает 100 байт, а размер страницы 4096 байт, то на странице поместится 40 записей и ещё останется 96 пустых байт на каждой странице. 400 записей займут на диске 10 страниц или 40Кбайт.
Помимо данных, таблица содержит индексы, каждый из которых тоже занимает место. Если в индексе встречаются поля типов переменного размера, сам индекс также будет переменного размера.
Не смотря на то, что точный размер таблицы определить трудно, на практике достаточно бывает оценить порядок.
Дополнительно
Когда MySQL хранит текст, то она и цифры хранит как обычные символы. Скажем, в кодировке UTF-8 все цифры занимают один байт, а русские буквы занимают 2 байта. Чтобы считать корректно, необходимо знать, какая кодировка используется для данного поля.
Типы INT
и т.д. хранят числа в двоичной системе. INT
всегда требует 4 байта, где хранится целое число в интервале -231..231−1.
Тип DECIMAL
хранит числа в десятичной системе, используя хитрое кодирование, чтобы упаковывать каждые 3 десятичные цифры в 10 бит (каждые 9 цифр в 4 байта).
Типы BIT(n)
упаковываются вместе в достаточное количество байт. BIT(3)
всегда будет занимать 1 байт, потому что меньше памяти выделить невозможно. Но два поля по BIT(3)
также будут занимать 1 байт, поскольку MySQL будет хранить их вместе.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, как связать 3 таблицы в SQL запросе ? Имею вот такой запрос(связывает 2 таблицы)
Есть event которые вызывает хранимую процедуруМожно ли передать параметры в евент который в свою очередь передаст их в процедуру?