2011-09-05 9 views
5

Estoy almacenando correos electrónicos enviados en un RDBMS, incluyendo la dirección, el domicilio y el cuerpo del correo electrónico.PostgreSQL Big Text Column Performance

El cuerpo realmente puede ser cualquier cantidad arbitraria de texto, y nunca me importaría buscar en él.

¿Hay algún problema de rendimiento que deba preocuparme cuando tengo una columna potencialmente grande que no se usa con demasiada frecuencia en una de las tablas a las que accedo con mayor frecuencia (correos electrónicos)?

(Este proyecto está escrito en Rails)

Respuesta

6

No, usted no tiene que preocuparse por eso.

Técnicamente no hay diferencia en el almacenamiento entre, por ej. varchar(5) y una columna text.

Cita de la manual

no hay diferencia de rendimiento entre estos tres tipos, aparte del aumento de espacio de almacenamiento cuando se utiliza el blanco acolchado tipo

Los tres tipos mencionados hay char, varchar y text. Donde char es el "tipo acolchado en blanco".

+0

Eso no es realmente cierto; un 'varchar (5)' está limitado a 9 bytes de almacenamiento, pero un 'text' (o' varchar' simple, sin un tamaño) puede exceder el tamaño de página, lo que coloca los datos reales fuera de la página. – SingleNegationElimination

+0

@TokenMacGuy: no, no hay diferencia en el almacenamiento entre esos dos. Con la única excepción de que un varchar (5) nunca será "tostado" ya que no excede el umbral para comprimir el valor. 5 caracteres almacenados en una columna varchar (5) no son diferentes a 5 caracteres almacenados en una columna de texto. –

+0

oh ... ¡estamos de acuerdo! – SingleNegationElimination

6

postgresql almacena objetos grandes en un área secundaria. Puede leer sobre esto aquí: TOAST. La principal preocupación será mantener el objeto grande fuera de la lista de selección de consultas que devuelven muchas filas, para que evite visitar el área de almacenamiento secundaria.

Si decide agregar funcionalidad de búsqueda al texto del cuerpo, y cuando decida agregarla, necesitará utilizar una estrategia de texto completo, que es bien soportada en Postgres, pero de alguna manera no es intuitiva. El tema recibe un full chapter de tratamiento en el manual.

+0

Ese enlace no lo menciona, pero sobre búsqueda de texto completo, querrá configurar un índice GIN en la columna de texto. Con eso, la búsqueda de texto completo es increíblemente rápida. No sé por qué más personas no mencionan esta función de PostgreSQL. – Cerin