Размер таблицы MariaDB, если FK пуст или Нуль - PullRequest
0 голосов
/ 19 февраля 2020

Обновить мой вопрос после отрицательного голосования.

У меня есть следующая таблица.

+-------------------------------+
|   tbl_IndexDemo               |
+---------+------+--------------+
|   ID    | INT  | Primary Key  |
|   FK_1  | INT  | Foreign Key  |
|   FK_2  | INT  | Foreign Key  |
|   FK_3  | INT  | Foreign Key  |
|   FK_4  | INT  | Foreign Key  |
+---------+------+--------------+

Он имеет один первичный ключ и четыре внешних ключа.

Я пытаясь оценить размер (в байтах) строки.

Каков размер, если все поля имеют данные? Я вычислил

 ID     4 bytes + 4 bytes (Index-PK)
 FK_1   4 bytes
 FK_2   4 bytes
 FK_3   4 bytes
 FK_4   4 bytes

 Total per row = 24 bytes

И если FK_3 имеет значение emtpy или NULL, каков размер строки?

Я использую MariaDB с InnoDB.

1 Ответ

2 голосов
/ 29 февраля 2020

Вычисление размера таблицы InnoDB далеко не так просто. Но вот быстрый и грязный способ оценить. Вы получили 24; теперь умножьте это на 2 или 3. То есть, грубая оценка размера строки будет 48-72 байта.

Что касается NULL или нет, то это будет иметь разницу только в 4 байта на INT , если это имеет значение .

Обратите внимание, что возможны значения 4 ROW_FORMAT. Это добавляет трудно подсчитать морщины в расчетах. TEXT и PARTITION также вносят путаницу в оценку размера.

Если вас беспокоит пространство, подумайте, действительно ли вам нужен INT, который занимает 4 байта и имеет ограничение в 2 миллиарда. Возможно, MEDIUMINT UNSIGNED (3 байта, макс. 16M) будет лучше - особенно если учесть, что экономит 1 байт для каждого вхождения. У вас будет как минимум 3 вхождения - столбец в tbl_IndexDemo, столбец в другой таблице и INDEX, неявно созданный FK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...