Bases de datos: son & # 8220; TEXTO & # 8221; campos menos eficientes que & # 8220; varchar & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/207867

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Es menos eficiente usar TEXT que varchar en una base de datos SQL?

Si es así, ¿por qué?

Si no, ¿por qué no solo usarías TEXTO?

No estoy apuntando a una base de datos específica aquí, pero oracle es probablemente el más relevante, aunque por el momento estoy probando en MySQL como parte de una prueba de concepto.

¿Fue útil?

Solución

De Microsoft aquí

  

Los tipos de datos ntext, text e image serán   ser eliminado en una futura versión de   Microsoft SQL Server. Evitar el uso de   estos tipos de datos en el nuevo desarrollo   Trabajar, y planear para modificar aplicaciones.   que actualmente los utilizan. Utilizar   nvarchar (max), varchar (max), y   varbinary (max) en su lugar.

Cuando usa varchar (max) sobre el texto, puede usarlo en la cláusula WHERE , porque funcionan igual que sus contrapartes más pequeñas, varchar, nvarchar y varbinary . A continuación se muestra una pequeña lista de lo que se debe usar, en oposición a lo que se usaría:

  • Use varchar (max) en lugar de texto
  • Use nvarchar (max) en lugar de ntext
  • Use varbinary (max) en lugar de imagen

Otros consejos

La documentación de PostgreSQL dice :

  

Sugerencia: no hay diferencias de rendimiento entre estos tres tipos, aparte del aumento del tamaño de almacenamiento cuando se usa el tipo de relleno en blanco, y algunos ciclos adicionales para verificar la longitud cuando se almacena en una columna de longitud limitada. Si bien el carácter (n) tiene ventajas de rendimiento en otros sistemas de bases de datos, no tiene tales ventajas en PostgreSQL. En la mayoría de las situaciones, se debe utilizar texto o caracteres que varían.

La respuesta corta es: Sí, son menos eficientes.

La respuesta más larga y complicada es:

Sí, probablemente sean menos eficientes. Depende de qué DBMS está utilizando y el tamaño de su tabla, etc. Los campos de TEXTO son de ancho variable, y como tal, el DBMS tiene que hacer más trabajo cuando se trata de encontrar registros. El impacto que esto tiene en su rendimiento es directamente proporcional a la eficiencia de su DBMS en general, la cantidad de datos que almacena sobre las filas de la tabla y si optimiza las tablas de longitud fija.

Sé que MySQL funciona más rápido con filas de tablas de longitud fija, pero debe decirle que la tabla puede tratarse primero como una tabla de longitud fija. Realmente no tengo ninguna experiencia práctica con otros DBMS para poder relacionar números reales. Pero en tablas con muchos (lee un millón o más) de registros, puede hacer una diferencia significativa. Sin embargo, las mesas más pequeñas tendrán poca o ninguna diferencia práctica.

Debe ser específico acerca de qué base de datos está hablando. Creo que al menos en algunas bases de datos, TEXT se almacena como un CLOB separado de la tabla (que solo contiene una referencia). Esto lleva a que la tabla sea más pequeña (buena) pero una búsqueda adicional y probablemente se pierda la memoria caché cuando se recupera (mala).

Probablemente también haya implicaciones de indexación y consulta, pero nuevamente dependerá del RDBMS en particular que estés usando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top