Niet met PostgreSQL, uit de handleiding :
Dus een kolom met grote tekens (zoals TEXT
of VARCHAR
zonder een gespecificeerde groottelimiet) wordt buiten de hoofdtabelgegevens opgeslagen. PostgreSQL heeft dus uw "zet het in een aparte tabel"-optimalisatie ingebouwd. Als u PostgreSQL gebruikt, rangschik uw tabel dan verstandig en laat de gegevenslay-out over aan PostgreSQL.
Ik weet niet hoe MySQL of andere RDBM's hun gegevens rangschikken.
De reden achter deze optimalisatie is dat de database de gegevens voor elke rij gewoonlijk in aaneengesloten blokken op de schijf bewaart om het zoeken naar wanneer de rij moet worden gelezen of bijgewerkt, te verminderen. Als je een TEXT (of een ander type variabele lengte) kolom in een rij hebt, dan is de grootte van de rij variabel, dus er is meer werk nodig om van rij naar rij te gaan. Een analogie zou het verschil zijn tussen toegang tot iets in een gekoppelde lijst versus toegang tot een array; met een gelinkte lijst moet je drie elementen één voor één lezen om bij de vierde te komen, met een array die je gewoon offset 3 * element_size
bytes vanaf het begin en je bent er in één stap.