SQL - rozdeliť veľkú tabuľku podľa toho, ako často sa pristupuje? - sql, postgresql

Mám stôl s 50 políčkami:

  1. 10 Pole, ktoré sú takmer vždy potrebné.
  2. 40 Pole, ktoré sú veľmi zriedka potrebné.

Chcel by som zhruba povedať, že polia v (1) sú potrebné k prístupu 1000 krát častejšie ako polia v (2).

Mali by som ich rozdeliť na dve tabuľky s vzťahmi jeden k jednému, alebo si ich ponechať v rovnakej tabuľke?

odpovede:

1 pre odpoveď č. 1

Proces, ktorý popisujete, je niekedyoznačované ako "vertikálne rozdelenie". Prijaté na extrémne (jeden stĺpec na zvislý oddiel), takto storočné databázy ukladajú dáta. Bohužiaľ (podľa môjho najlepšieho vedomia), Postgres v súčasnosti nemá priamu podporu pre vertikálne rozdelenie.

Vaša myšlienka rozdelenia údajov na dve tabuľky je v poriadku. Všimol by som si nasledujúceho:

  • Ak chcete použiť druhú tabuľku, budete musieť upraviť dopyty, ktoré používajú ďalšie stĺpce. (Môžete zabaliť join do pohľadu, ktoré používate, keď chcete použiť ďalšie stĺpce.)
  • Ak obidve tabuľky majú klastrovaný primárny kľúč, ktorý ich spája, potom join by malo byť naozaj rýchlo.
  • Ak vkladáte / aktualizujete / vymazávate údaje, musíte byť opatrní pri synchronizácii. Myslím, že to zvládnete s INSTEAD OF spustiť na pohľad kombinujúci tabuľky.
  • Ak niektoré záznamy nemajú ďalšie stĺpce, môže to byť veľká víťazka na strane priestoru.
  • Ak sa všetky záznamy a všetky stĺpce načítajú do vyrovnávacej pamäte, potom to pravdepodobne nie je veľké víťazstvo.

Toto môže byť za určitých okolností veľkou výhrou výkonnosti. Existuje však aj ďalšia manuálna práca na udržanie synchronizácie tabuliek.


0 pre odpoveď č. 2

Na odhad nie je dosť dosť informácií vyčísliť), čo sú výhody, ale náklady sú veľmi jasné - zložitejší kód, zložitejšie schémy, pravdepodobne väčšie celkové využitie priestoru a režijné náklady pri pridávaní a odstraňovaní riadkov.

Zlepšenie výkonu môže prísťskenovanie menšieho množstva údajov pri vykonávaní úplnej kontroly tabuľky alebo zo zvýšenej pravdepodobnosti nájdenia dátových blokov v pamäti v prípade potreby a celkovo menšej stopy pamäte, ale bez konkrétnych informácií o druhoch bežne vykonávaných operácií a či server je pod pamäťovým tlakom, nie je možné poskytnúť spoľahlivé rady.

Buďte veľmi opatrní, aby ste váš systém zložitejší ako vedľajší účinok neistých ziskov.


Ponuka