example - mysql text vs varchar
MySQL varchar(2000) vs texto? (2)
Necesito almacenar en promedio un párrafo de texto, que sería aproximadamente ~ 800 caracteres en la base de datos. En algunos casos raros, puede llegar hasta 2000-2500 ~ caracteres. He leído el manual y sé que ya hay muchas de estas preguntas, pero he leído más de 10 preguntas en stackoverflow y todavía me resulta un poco difícil averiguar si debería usar simplemente texto o algo así como varchar ( 2000). La mitad parece decir usar varchar, mientras que la otra mitad dice texto. Algunas personas dicen que siempre use texto si tiene más de 255 caracteres (sí, esto fue después de 5.0.3 que permitió varchar hasta 65k). Pero luego pensé para mí mismo si tuviera que usar el texto cada vez que los personajes tuvieran más de 255, entonces ¿por qué Mysql se molestó en aumentar el tamaño si esa era siempre la mejor opción?
Ambos tienen un tamaño de almacenamiento variable que he leído, entonces ¿no habría diferencia en mi situación? Me inclinaba personalmente hacia varchar (2000) y luego leí que varchar almacena los datos en línea mientras que el texto no. ¿Esto significa que si selecciono constantemente esta columna, almacenar los datos como varchar sería mejor, y por el contrario si raramente selecciono esta columna, entonces usar texto sería mejor? Si eso es cierto, creo que ahora elegiría la columna de texto ya que no seleccionaré esta columna muchas de las veces que ejecuto una consulta en la tabla. Si es importante, a esta tabla también se le suele unir también (pero no seleccionará la columna), ¿eso también aumentaría el beneficio de usar texto?
¿Son correctas mis suposiciones de que debería ir con el texto en este caso?
Creo que lo resumiste bien. Otra cosa que podría considerar es simplemente mover el "texto" a otra mesa ... y volver a unir el registro maestro. De esta forma, cada vez que esté utilizando la tabla maestra, los datos adicionales de dónde se encuentra el "texto" ni siquiera ocupan espacio en el registro maestro. Cuando lo necesite, puede unirse a esa mesa. De esta forma puedes almacenarlo como varchar en caso de que quieras hacer algo como "donde texto como ..."
Cuando una tabla tiene columnas TEXT o BLOB, la tabla no se puede almacenar en la memoria. Esto significa que cada consulta (que no golpea el caché) tiene que acceder al sistema de archivos, que es órdenes de magnitud más lentas que la memoria.
Por lo tanto, debe almacenar esta columna de TEXTO en una tabla separada a la que solo se accede cuando realmente la necesita. De esta forma, la tabla original se puede almacenar en la memoria y será mucho más rápida.
Piense en ello como separando los datos en una "tabla de memoria" y una "tabla de archivos". El motivo para hacerlo es evitar el acceso al sistema de archivos, excepto cuando sea necesario (es decir, solo cuando necesite el texto).
No gana nada almacenando el texto en varias tablas. Aún debe acceder al sistema de archivos.
Apesadumbrado lo que quise decir era, por ejemplo, una secuencia de comandos de foro, en la tabla de publicaciones podrían estar almacenando 20 columnas de datos de publicación, también almacenan la publicación real como un campo de texto en la misma tabla. ¿Entonces esa columna de publicación debería separarse?
Sí.
Parece extraño tener una tabla llamada publicación, pero la publicación real no se almacena allí, tal vez> en otra tabla llamada "actual_post" no esté seguro jajaja.
Puedes probar (publicaciones, post_text) o (post_details, publicaciones) o algo así.
Tengo una tabla de etiquetas que tiene solo tres campos, tag_id, etiqueta y descripción. ¿Entonces esa columna de> descripción también debería separarse? ¿Entonces necesito una tabla de etiquetas y una tabla de> etiquetas_descripción solo para almacenar 3 columnas?
Si la descripción es una columna TEXTO y ejecuta consultas en esta tabla que no necesita la descripción, sería preferible.