sql >> Database >  >> RDS >> Mysql

Als u een TEKST-veld in MySQL of PostgreSQL heeft, moet u dit dan in een aparte tabel plaatsen?

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.



  1. SQL Server 2016:prestatie-impact van Always Encrypted

  2. hoe kan ik mysql-database exporteren met ssh?

  3. sql hoe u drie query's uit twee tabellen in één query kunt combineren

  4. Passeer en retourneer een aangepast array-object in ibatis en oracle in java