Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quando você tem um campo TEXT no MySQL ou PostgreSQL, você deve colocá-lo em uma tabela separada?


Não com PostgreSQL, do manual :

Portanto, uma coluna de caracteres grande (como TEXT ou VARCHAR sem um limite de tamanho especificado) é armazenado longe dos dados da tabela principal. Assim, o PostgreSQL tem sua otimização "coloque em uma tabela separada" embutida. Se você estiver usando o PostgreSQL, organize sua tabela de forma sensata e deixe o layout dos dados para o PostgreSQL.

Não sei como o MySQL ou outros RDBMs organizam seus dados.

A razão por trás dessa otimização é que o banco de dados geralmente manterá os dados de cada linha em blocos contíguos no disco para reduzir a busca quando a linha precisar ser lida ou atualizada. Se você tiver uma coluna TEXT (ou outro tipo de comprimento variável) em uma linha, o tamanho da linha será variável, portanto, é necessário mais trabalho para ir de linha para linha. Uma analogia seria a diferença entre acessar algo em uma lista encadeada versus acessar um array; com uma lista encadeada, você tem que ler três elementos um de cada vez para chegar ao quarto, com um array você apenas desloca 3 * element_size bytes desde o início e você está lá em uma etapa.