SQL - разделяне на голяма таблица според честотата на достъп до тях? - sql, postgresql

Имам таблица с 50 полета:

  1. 10 Полета, които почти винаги са необходими.
  2. 40 Полета, които са много рядко необходими.

Грубо бих казал, че полетата в (1) са необходими 1000 пъти по-често, отколкото полетата в (2).

Трябва ли да ги разделим на две таблици с връзка „един към един“ или да запазим всички в една и съща таблица?

Отговори:

1 за отговор № 1

The process that you are describing is sometimes наричана "вертикално разделяне". Взети до краен предел (една колона на вертикален дял), това е начинът, по който колоновите бази данни съхраняват данни. За съжаление (доколкото ми е известно) Postgres понастоящем няма пряка подкрепа за вертикално разделяне.

Вашата идея за разделяне на данните на две таблици е добре. Ще отбележа следното:

  • Трябва да промените заявките, които използват допълнителните колони, за да използвате втората таблица. (Можете да обгърнете join в изглед, който използвате, когато искате допълнителни колони.)
  • Ако и двете таблици имат клъстериран първичен ключ, който ги свързва, тогава join трябва да бъде много бързо.
  • Ако въвеждате / актуализирате / изтривате данни, трябва да внимавате за синхронизацията. Мисля, че можете да се справите с това с INSTEAD OF задейства в изглед, комбиниращ таблиците.
  • Ако някои записи нямат допълнителни колони, това може да бъде голяма победа на космическата страна.
  • Ако всички записи и всички колони ще бъдат заредени в кеша, това вероятно не е голяма победа.

При някои обстоятелства това може да бъде голяма победа в изпълнението. Но има допълнителна ръчна работа, която да поддържа синхронизирането на таблиците.


0 за отговор № 2

Тук наистина няма достатъчно информация, за да се оцени (няма значение всъщност количествено) какви са ползите, но разходите са много ясни - по-сложен код, по-сложна схема, вероятно по-голямо общо използване на пространството, както и допълнителни разходи при добавяне или премахване на редове.

Може да дойде подобрение на ефективносттасканиране на по-малко количество данни при извършване на пълно сканиране на таблица, или от повишена вероятност за намиране на блокове данни в паметта, когато е необходимо, и общо по-малък отпечатък на паметта, но без специфична информация за типовете операции, които обикновено се извършват, и дали сървърът е под налягане на паметта, не могат да бъдат дадени надеждни съвети.

Бъдете много предпазливи, за да направите вашата система по-сложна като страничен ефект от несигурните ползи от изпълнението.


Свързани въпроси
Най - известен