sql >> Base de Datos >  >> RDS >> Mysql

Cuando tiene un campo de TEXTO en MySQL o PostgreSQL, ¿debería ponerlo en una tabla separada?

No con PostgreSQL, del el manual :

Entonces, una columna de caracteres grande (como TEXT o VARCHAR sin un límite de tamaño especificado) se almacena lejos de los datos de la tabla principal. Por lo tanto, PostgreSQL tiene incorporada su optimización de "ponerlo en una tabla separada". Si está utilizando PostgreSQL, organice su tabla con sensatez y deje el diseño de datos a PostgreSQL.

No sé cómo MySQL u otros RDBM organizan sus datos.

La razón detrás de esta optimización es que la base de datos generalmente mantendrá los datos de cada fila en bloques contiguos en el disco para reducir la necesidad de buscar cuándo se debe leer o actualizar la fila. Si tiene una columna de TEXTO (u otro tipo de longitud variable) en una fila, entonces el tamaño de la fila es variable, por lo que se necesita más trabajo para pasar de una fila a otra. Una analogía sería la diferencia entre acceder a algo en una lista enlazada y acceder a una matriz; con una lista enlazada, debe leer tres elementos uno a la vez para llegar al cuarto, con una matriz simplemente compensa 3 * element_size bytes desde el principio y estás ahí en un solo paso.