Mysql
 sql >> Database >  >> RDS >> Mysql

Quando hai un campo TEXT in MySQL o PostgreSQL, dovresti inserirlo in una tabella separata?

Non con PostgreSQL, da il manuale :

Quindi una colonna di caratteri di grandi dimensioni (come TEXT o VARCHAR senza un limite di dimensione specificato) viene archiviato lontano dai dati della tabella principale. Quindi, PostgreSQL ha la tua ottimizzazione "mettilo in una tabella separata" integrata. Se stai usando PostgreSQL, organizza la tua tabella in modo ragionevole e lascia il layout dei dati a PostgreSQL.

Non so come MySQL o altri RDBM organizzino i loro dati.

Il motivo alla base di questa ottimizzazione è che il database di solito conserva i dati per ogni riga in blocchi contigui sul disco per ridurre la ricerca quando la riga deve essere letta o aggiornata. Se hai una colonna TEXT (o un altro tipo di lunghezza variabile) in una riga, la dimensione della riga è variabile, quindi è necessario più lavoro per passare da una riga all'altra. Un'analogia sarebbe la differenza tra l'accesso a qualcosa in un elenco collegato e l'accesso a un array; con una lista collegata, devi leggere tre elementi uno alla volta per arrivare al quarto, con un array devi solo compensare 3 * element_size byte dall'inizio e sei lì in un solo passaggio.