Fwd: excepcion en SELECT *

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

In response to

Browse pgsql-es-ayuda by date

  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