Postgresql оптимизация размера "многие ко многим" - PullRequest
0 голосов
/ 27 июня 2019

Когда я смотрел на свою БД в своем проекте, я понял, что самая тяжелая таблица, которую я имею, - это таблица отношений между двумя другими таблицами.

Таблица интеграции, пользователь и знаменитые интеграционные_пользователи (привязывающие пользователяинтеграция).

  • Размер таблицы My User: 2011 строки для 819 КБ (данные 395 КБ + индексы 425 КБ)
  • Размер таблицы интеграции: 3 строки для 32 КБ (данные 16 КБ + 16 КБ)индексы)
  • Размер таблицы «Мои клиенты интеграции»: 2011 строки на 4 МБ (данные 4 МБ + индексы 294 КБ)

Структура этой таблицы клиентов интеграции:

1   "id"    "int4"  "NO"    NULL    "nextval('integration_customers_id_seq'::regclass)" ""  NULL
2   "user_id"   "int4"  "NO"    NULL    NULL    ""  NULL
3   "integration_id"    "int4"  "NO"    NULL    NULL    ""  NULL
4   "created_at"    "timestamp" "NO"    NULL    NULL    ""  NULL
5   "updated_at"    "timestamp" "NO"    NULL    NULL    ""  NULL
6   "parameters"    "jsonb" "YES"   NULL    "'{}'::jsonb"   ""  NULL
7   "marketing_info_email"  "bool"  "YES"   NULL    "true"  ""  NULL
8   "subscriber_id" "varchar"   "YES"   NULL    NULL    ""  NULL

И мои индексы:

"integration_customers_pkey"    "BTREE" t   "id"    ""  NULL
"index_integration_customers_on_user_id_and_integration_id" "BTREE" t   "user_id,integration_id"    ""  NULL
"index_integration_customers_on_user_id"    "BTREE" f   "user_id"   ""  NULL
"index_integration_customers_on_integration_id" "BTREE" f   "integration_id"    ""  NULL

Я просто нахожу разницу в размерах между таблицей отношений и двумя другими, огромными, и мне было интересно, упустил ли я что-то в архитектуре или это было нормально?Если это ненормально, что я сделал не так?Если это нормально, есть ли способ оптимизировать его?

Рад предоставить больше информации, если это необходимо:)

Спасибо всем большое за ваше время!

1 Ответ

1 голос
/ 27 июня 2019

Возможно, размер соответствует вашим ожиданиям, поскольку таблица содержит больше данных. Помните, что таблица отношений m-to-n может содержать больше записей, чем ссылочные таблицы.

Возможно стол раздутый. Установите расширение pgstattuple и используйте функцию с тем же именем в таблице, чтобы выяснить, так ли это. Если да, запланируйте VACUUM (FULL) и настройте автовакуум на более агрессивный режим.

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