From: | Jaime Casanova <jaime(at)2ndquadrant(dot)com> |
---|---|
To: | POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Fwd: excepcion en SELECT * |
Date: | 2011-05-10 15:59:27 |
Message-ID: | BANLkTi=CMQwFhpXPuHMF9Q1spzHO+VqRRA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Se me fue directo... ahora CC: a la lista...
---------- Forwarded message ----------
From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
Date: 2011/5/10
Subject: Re: [pgsql-es-ayuda] excepcion en SELECT *
To: Juan Manuel Acuña Barrera <gps1mx(at)gmail(dot)com>
2011/5/10 Juan Manuel Acuña Barrera <gps1mx(at)gmail(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Yonatan Carrranza Alarcón | 2011-05-10 16:19:24 | Versión del Postgresql mas estable |
Previous Message | Harold Alexander Onore Harold | 2011-05-10 15:43:59 | Re: pg_hba |