Как Postgres размер таблицы БОЛЬШЕ, чем Mysql Размер таблицы? - PullRequest
0 голосов
/ 21 февраля 2020

При сравнении размеров таблиц Mysql и Postgres мы обнаружили, что:

Postgre Размер таблицы (4758390 строк) (ваниль postgres): 1402MB

Длина данных = 1063 МБ Длина индекса = 339 МБ

Mysql Размер таблицы (4758390 строк) (с Inno DB): 1056 МБ

Длина данных = 845 МБ Длина индекса = 211 МБ

Таблицы имеют следующую схему: - Схема: -
MySQL
int ( 11)
varchar (15)
datetime
float
float
float
float
float
double
double
double
float
longtext
double
double
int (11)
double
float
int (11)
int (11)
float
int (11 )
int (11)
int (11)
int (11)
varchar (50)
int (11)
int (11)
int (11)

Postgres
серийный
varchar
метка времени
двойная точность
двойная точность
двойная точность
двойная точность
двойная точность
цифра c
цифра c
цифра c
двойная точность
варчар
цифра c
цифра c
двойная точность
число c
двойная точность
целое число
целое число
двойная точность
целое число
целое число
целое число
целое число
varchar
целое число
целое число
целое число

Запрос, используемый для расчета размеров таблиц: -

MySQL


SELECT table_name AS `Table`,data_length, index_length,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "DB_NAME
      AND table_name = "TABLE_NAME";    

Postgres

SELECT pg_size_pretty(pg_total_relation_size('TABLE_NAME'));

Редактировать: -
Индексы в MySQL: Размер
(varchar (15), datetime) -> 133 МБ
(datetime ) -> 78 МБ
Индексы в Postgres: Размер
(varchar, отметка времени) -> 339 МБ
Я новичок в базах данных, и мне интересно, как это возможно.

1 Ответ

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

Вы используете типы данных с разными размерами:

Mysql с плавающей запятой 4 байта против postgresql с удвоенными значениями, которые составляют 8 байтов

Mysql datetime выглядит как 4 байта (я не смог найти четкую документацию), тогда как метка времени postgreql составляет 8 байтов.

Mysql integer (11) составляет 4 байта, тогда как для Postgresql цифра c Фактическое требование к памяти составляет два байта для каждой группы из четырех десятичных цифр плюс три-восемь байтов служебных данных

...