¿Hay algún punto en reducir el tamaño de las columnas VARCHAR?


18

Buscar en Google parece haber informes mixtos sobre si el tamaño de una VARCHAR2columna en Oracle afecta el rendimiento o no.

Me gustaría darle VARCHARun pequeño giro a la cuestión del tamaño y espero tener alguna idea al respecto:

Dados campos de texto libre (multilínea) ( no cosas cortas como nombres) que desea almacenar en una base de datos (Oracle), ¿hay algún punto (wrt. Rendimiento u otro) en no maximizar la VARCHARcapacidad ( VARCHAR2(4000)en Oracle) sino elegir un valor menor como 1024 o 512 porque de todos modos es probable que sea suficiente en el 98% de los casos.


Respuestas:


12

Afecta el uso de memoria, especialmente cuando un programa cliente tiene que asignar suficiente memoria para recibir un conjunto de datos.

Tenga en cuenta que muchas aplicaciones (especialmente aplicaciones web) usan UTF-8, que es un conjunto de caracteres de varios bytes. Como tal, realmente debería considerar los caracteres en lugar de los bytes.

Si esperaba más de mil caracteres, entonces consideraría activamente un CLOB. Estaría pensando si almacenará texto sin formato o alguna forma de marcado (wiki / html?), Uso con idiomas no euro. Las preguntas y respuestas aquí, por ejemplo, serían CLOB, pero los comentarios pueden caber en un VARCHAR.

Si maximizas un VARCHAR, entonces en seis meses alguien querrá hacerlo más grande nuevamente, y estarías pateándote por no usar un CLOB.


2
UTF-8 generalmente usará un byte para un carácter para los idiomas occidentales. Es de varios bytes en el sentido de que permite secuencias de "escape" de varios bytes para representar caracteres no occidentales.
Eric J.

9

En general, no hay consideraciones de rendimiento, aunque existen problemas secundarios que pueden ser importantes para usted. El límite para a varchardebe considerarse como una restricción como cualquier otra: está ahí para hacer cumplir una regla de negocios.

En mi opinión, la pregunta que debe hacerse es "¿Quiero evitar que los datos de texto libre almacenados en este campo sean más largos que n bytes / caracteres", ese es el único factor determinante al elegir entre varchar(512)y varchar(4000).

Tenga en cuenta que estoy asumiendo que está hablando sobre varcharel tipo de SQL: la situación es diferente pl/sqly la elección de la longitud puede ser crucial por razones de asignación de memoria.


Gracias. En lo que respecta a mi experiencia (muy limitada), cualquier "regla comercial" que establezca un límite entre "500 - 3999" es simplemente arbitraria, es decir, a alguien simplemente le gustó el número. En mi humilde opinión, si voy por texto libre y no hay consecuencias de implementación (el contexto de esta pregunta), o está al máximo (4000) o no es texto libre. --- El punto que estoy tratando de hacer en este comentario: creo que nunca habrá una regla de negocios que ayude a elegir por cierto. 512 y 4000 (a menos que sea: "tantos caracteres como sea posible")
Martin

Si realmente es "tantos caracteres como sea posible", como dice @gary, deberías considerar un clob, ¿no?
Jack Douglas

4

Si un valor más pequeño funcionará para el 98% de los casos, pero se necesita un Varchar2 (4000) para funcionar para el 100% de los casos, entonces no tiene más remedio que usar el valor más grande . Crear una tabla separada para el 2% de los valores y luego coordinar las inserciones / selecciones, etc. agregaría una complejidad que eliminaría cualquier beneficio de memoria o rendimiento al no extender el campo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.