2008-10-16 17 views
9

¿Es menos eficiente usar TEXT que varchar en una base de datos SQL?Bases de datos: ¿Son los campos "TEXTO" menos eficientes que "varchar"?

Si es así, ¿por qué?

Si no, ¿por qué no siempre usar TEXT?

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

+0

Creo que ya se ha dicho, en el caso de MySQL, también hay "INDEX READ" para columnas varchar y siempre un "FILA LEÍDA" para columnas de texto. Lo que hace que una consulta LIKE sea más lenta en una columna TEXTO. – Till

Respuesta

4

De Microsoft here

ntext tipos de texto y datos de imagen ser eliminado en una versión futura de Microsoft SQL Server . Evite utilizar estos tipos de datos en el nuevo trabajo de desarrollo , y planee modificar las aplicaciones que actualmente los utilizan. Use nvarchar (max), varchar (max) y varbinary (max) en su lugar.

Cuando se utiliza varchar(max) sobre el texto que se puede utilizar en la cláusula WHERE, ya que funcionan igual que sus contrapartes más pequeñas, varchar,nvarchar and varbinary. A continuación se muestra una pequeña lista de lo que debe ser utilizado en contraposición lo que iba a ser utilizado:

  • Uso varchar (max) en lugar de texto
  • Uso nvarchar (max) en lugar de ntext
  • Uso varbinary (max) en lugar de la imagen
1

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

El, respuesta más complicada ya es:

sí, son probablemente menos eficiente. Depende de qué DBMS está utilizando y el tamaño de su tabla, etc., etc. Los campos TEXT son de ancho variable, y como tal, el DBMS tiene que trabajar más cuando intenta 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 tiene que decirle que la tabla se puede tratar primero como una tabla de longitud fija. Realmente no tengo ninguna experiencia práctica con otros SGBD para poder relacionar los números reales. Pero en las tablas con lotes (lee un millón o más) de registros, puede hacer una gran diferencia. Las mesas más pequeñas tendrán poca o ninguna diferencia práctica.

+0

Eso es 'TEXT' contra' CHAR'. El OP pidió 'TEXT' contra' VARCHAR'. – dan04

1

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

Probablemente haya implicaciones de indexación y consulta, pero de nuevo dependerá del RDBMS particular que esté utilizando.

2

PostgreSQL documentation says:

Consejo: No hay diferencias de rendimiento entre estos tres tipos, aparte del aumento de tamaño de almacenamiento cuando se utiliza el tipo rellenada con blancos, y unos pocos ciclos extra para comprobar la longitud cuando se almacenan en una columna de longitud limitada. Si bien el carácter (n) tiene ventajas de rendimiento en algunos otros sistemas de bases de datos, no tiene tales ventajas en PostgreSQL. En la mayoría de las situaciones, se debe usar texto o caracteres en su lugar.

Cuestiones relacionadas