Как размер таблицы Postgres БОЛЬШЕ, чем размер таблицы Mysql?

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

Размер таблицы Postgre (4758390 строк) (vanilla postgres): 1402 МБ

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

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

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

Таблицы имеют следующую схему: - Схема: -
MySQL
int (11)
varchar (15)
datetime
float
float < br> 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
метка времени
двойная точность
двойная точность
двойная точность
двойная точность
двойная точность
числовой < br> числовой
числовой
двойной точностью
varchar
числовым
числовым
двойной точностью
числовым
двойной точностью
целым числом
целым числом
двойным точность
целое число
целое число
целое число
целое число
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, timestamp) -> 339 МБ
Я новичок в базах данных и задаюсь вопросом, как это возможно.


person Naitick    schedule 21.02.2020    source источник
comment
В этом вопросе отсутствуют подробности, необходимые для ответа. Сравните таблицу и индексы. Посмотрите, как данные хранятся на страницах. Определите, сколько строк хранится на каждой странице в обеих системах. Добавьте соответствующие детали к вопросу, тогда, возможно, кто-нибудь сможет ответить.   -  person Laurenz Albe    schedule 21.02.2020
comment
Вы не прилагаете усилий, исследуя, как реализованы таблицы.   -  person philipxy    schedule 21.02.2020
comment
myisam или inoodb?   -  person Jasen    schedule 21.02.2020
comment
Движок - InnoDB.   -  person Naitick    schedule 21.02.2020
comment
Кроме того, какие еще детали мне нужно добавить?   -  person Naitick    schedule 21.02.2020
comment
@LaurenzAlbe Не могли бы вы подробнее рассказать, как определить строки, которые хранятся на каждой странице?   -  person Naitick    schedule 21.02.2020
comment
В PostgreSQL используйте расширение pageinspect, чтобы увидеть подробности. ctid каждой строки содержит номер блока, так что вы можете быстро подсчитать количество строк на блок. Прочтите все о макете страницы базы данных.   -  person Laurenz Albe    schedule 21.02.2020
comment
проверьте это stackoverflow.com/questions/3490050/, надеюсь, это поможет вам.   -  person Manish Verma    schedule 21.02.2020
comment
проверьте это stackoverflow.com/questions/3490050/, надеюсь, это поможет вам.   -  person Manish Verma    schedule 21.02.2020
comment
проверьте это stackoverflow.com/questions/3490050/ надеюсь, это поможет вам.   -  person Manish Verma    schedule 21.02.2020
comment
Какое среднее количество байтов в столбце LONGTEXT?   -  person Rick James    schedule 22.02.2020


Ответы (1)


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

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

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

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

person Jasen    schedule 21.02.2020
comment
MySQL DATETIME раньше занимал 8 байтов; теперь занимает 5 байт. И, как показывает опыт, накладные расходы InnoDB составляют от 2х до 3х. - person Rick James; 22.02.2020