Se me fue directo... ahora CC:  a la lista...

---------- Forwarded message ----------
From: Jaime Casanova <ja...@2ndquadrant.com>
Date: 2011/5/10
Subject: Re: [pgsql-es-ayuda] excepcion en SELECT *
To: Juan Manuel Acuña Barrera <gps...@gmail.com>


2011/5/10 Juan Manuel Acuña Barrera <gps...@gmail.com>:
> El 10/05/2011, a las 10:25, Álvaro Hernández Tortosa escribió:
>
>> Tue, May 10, 2011 at 10:07:46AM -0500, Juan Manuel Acuña Barrera escribió:
>>
>>>>     Estoy de acuerdo, suele ser muestra de diseño no normalizado
>>>> (aunque tener muchas columnas no es condición suficiente de diseño no
>>>> normalizado, claro) y, dependiendo de algunos factores, puede llevar a
>>>> un menor rendimiento.
>>>
>>> Para tenerlo como referencia, cuantas son _muchas_ columnas en postgresql? 
>>> 50? 100? 500?
>>
>>       Bueno... no creo que haya un número que lo determine. Se trata
>> de que esté normalizado, no de que tenga pocas columnas. Así que depende
>> mucho de los datos que se están modelizando. No me atrevería a dar una
>> cifra... pero como referencia el límite de columnas en una tabla en
>> postgresql oscila entre 250 y 1600, dependiendo de los tipos de datos
>> usados... y para mí estos deberían ser límites que nunca se alcanzaran
>> en casos normales...
>
> Bien, me quedo mucho más tranquilo, creo que la tabla más grande que tengo es 
> de como unas 80 columnas, y ya sentía que eran muchas.
>

Veamos... asumamos que todas esas 80 columnas son tipo integer por lo
que usarian 4bytes c/u. El tamaño de la fila promedio en esa tabla
(asumiendo que no hay nulos) seria: (80*4)+(una cabecera que me parece
es de 24 bytes) = 344 bytes por registro

Lo que significa que en una pagina de disco de 8kb almacenaras hasta:
23 registros por pagina.

Si es una tabla mediana, digamos 1millon de registros, y quieres
obtener el 10% de la tabla en un select (esto serian 100000 registros)
tendrias que leer al menos: 4348 paginas de disco (y esto asumiendo
que los registros estan grabados de forma secuencial y que no tienes
tuplas muertas)

Esto que significa? depende... depende de la velocidad de tu disco,
depende de cuantas paginas de disco lee el SO en cada operacion de
entrada/salida, etc.

Ahora, considera la situacion en tu caso en que no todos los campos
son enteros (algunos seran timestamp, 8 bytes; algunos seran de
longitud variable, etc). Tambien considera el tamaño de la tabla
(numero de registros) y el uso de la misma, por ejemplo una tabla de
parametros no se usa mucho asi que no importara mucho pero una tabla
que con una cantidad considerable de registros y que se consulte con
mucha frecuencia no me gustaria que tenga 80 columnas... claro que ese
es mi criterio personal...

--
Jaime Casanova         www.2ndQuadrant.com
Professional PostgreSQL: Soporte y capacitación de PostgreSQL



-- 
Jaime Casanova         www.2ndQuadrant.com
Professional PostgreSQL: Soporte y capacitación de PostgreSQL
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a