SQL - розбити великий таблицю відповідно до того, як часто вони отримують доступ? - sql, postgresql

У мене є таблиця з 50 полями:

  1. 10 Поля, які майже завжди потрібні.
  2. 40 Поля, які дуже рідко потрібні.

Я б грубо сказав, що поля в (1) потрібні 1000 разів частіше, ніж поля (2).

Чи слід розділити їх на дві таблиці з відношенням один-до-одного або зберегти все в одній таблиці?

Відповіді:

1 для відповіді № 1

Процес, який ви описуєте, інодіназивають "вертикальним розбиттям". Прийнятий до крайності (один стовпець на вертикальний розділ), це як стовпчасті бази даних зберігають дані. На жаль (наскільки мені відомо), Postgres наразі не має прямої підтримки вертикальної розбивки.

Ваша ідея розділити дані на дві таблиці - це нормально. Відзначу наступне:

  • Необхідно змінити запити, які використовують додаткові стовпці для використання другої таблиці. (Ви можете обернути join у перегляд, який ви використовуєте, коли потрібно додаткові стовпці.)
  • Якщо обидві таблиці мають кластерний первинний ключ, який з'єднує їх, то join має бути дуже швидким.
  • Якщо ви вставляєте / оновлюєте / видаляєте дані, то потрібно бути обережними щодо синхронізації. Я думаю, ви можете вирішити це з INSTEAD OF тригер на вигляд, що об'єднує таблиці.
  • Якщо деякі записи не мають додаткових стовпців, це може бути великою перемогою на просторі.
  • Якщо всі записи і всі стовпці будуть завантажені в кеш, то це, мабуть, не є великою перемогою.

Це може бути велика перемога у виконанні, за певних обставин. Але є ще й ручна робота, щоб підтримувати синхронізацію таблиць.


0 для відповіді № 2

Тут насправді не достатньо інформації, щоб оцінити (не кажучи вже про насправді кількісно) what the benefits might be, but the costs are very clear -- more complex code, a more complex schema, probably greater overall space usage, and a performance overhead when adding and removing rows.

Можливе покращення ефективностісканування меншої кількості даних при виконанні повного сканування таблиці або з підвищеною ймовірністю пошуку блоків даних у пам'яті, коли це потрібно, і загального меншого розміру пам'яті, але без конкретної інформації про типи операцій, які зазвичай виконуються, і чи є сервер знаходиться під тиском пам'яті, не можна надати надійних рекомендацій.

Будьте дуже обережні, щоб зробити вашу систему більш складною як побічний ефект від невизначеного приросту продуктивності.


Схожі запитання
Найбільш популярний