[Pgsql-ayuda] Consulta sobre velocidad

Antonio Castro acastro@ciberdroide.com
Sun, 2 Feb 2003 09:26:55 +0100 (CET)


On Sat, 1 Feb 2003, Alvaro Herrera wrote:

> On Sat, Feb 01, 2003 at 08:57:56PM +0100, Antonio Castro wrote:
> > On Sat, 1 Feb 2003, Alvaro Herrera wrote:
> >=20
> > > restantes son los bytes mismos.  Nota que el largo en bytes es distin=
to
> > > del largo en caracteres (piensa en multibyte, que ahora viene activad=
o
> > > por defecto)
> >=20
> > Aqu=ED me hablas de algo que desconozco. He comprobado que char(1) y
> > varchar(1)  ocup=E1n lo mismo haciendo dos pruebas distintas en un par =
de
> > tablas y comparandolas. Eso es lo que tu dec=EDas. Lo que me pregunto=
=20
> > ahora es si char(n) siempre ocupa n+4 bytes o si eso depende de la=20
> > configuraci=F3n de la base de datos. Para varchar(n) me parece l=F3gico
> > que siempre sea as=ED para char(n) no.
>=20
> La diferencia de almacenamiento va a ser por ejemplo cuando tengas
> varchar(20) y char(20) y almacenes un string de 10 letras.  Varchar va a
> guardar las diez letras, mientras que char va a guardar las diez letras
> y adem=E1s diez espacios para completar.

Si eso lo hab=EDa entendido pero si te das cuenta habr=EDa no existe=20
ning=FAn criterio para usar char(n) en lugar de varchar(n) ya que
varchar(n) resultar=E1 con multibyte siempre mejor o igual que char(n).

> Multibyte es un sistema para almacenar caracteres en lenguas que tienen
> muchos caracteres distintos (japon=E9s, chino, etc).  Cada car=E1cter pue=
de
> ocupar m=E1s de un byte.
=20
Supongo que con una codificaci=F3n multibyte no se predecir la ocupaci=F3n =
de
un string porque unos caracteres ocuparan un byte mientras que otros ocupar=
an=20
dos. Pero volvemos a lo mismo char(n) ocupar=E1  n+4 bytes si est=E1 codifi=
cado=20
con multibyte pero estoy casi seguro de que ocupar=E1 n bytes en caso contr=
ario.
El manual desde mi punto de vista ofrece una informaci=F3n inexacta por ser=
=20
incompleta. Lo peor de todo es que esto puede tener una repercusi=F3n muy=
=20
fuerte en caso de necesitar usar claves alfanum=E9ricas tipo referencias de=
=20
art=EDculos, matriculas de coches o cosas as=ED.=20

Es como si el multibyte dejara sin sentido a char(n) que se mantiene por
compatibilidad. El verdadero sentido de usar char(n) es el que yo dije
que es el que me explicaron cuando estudie oracle hace un mont=F3n de a=F1o=
s.

> Disculpa que sea demasiado breve, pero estoy s=F3lo de paso y mi tiempo e=
s
> limitado.

Bueno no es necesario que me aclares nada, me hago una idea aproximada pero
suficiente para indagar por mi cuenta el resto. Muchas gracias.


Un saludo

Antonio Castro

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+
        /\     /\      Ciberdroide Inform=E1tica (Tienda de Linux)
          \\W//            <<< http://www.ciberdroide.com >>>
=09 _|0 0|_                                                   =20
+-oOOO--(___o___)--OOOo----------------------------------------------------=
+=20
|  . . . . U U . . . . Antonio Castro Snurmacher  acastro@ciberdroide.com  =
| =20
|  . . . . . . . . . .                                                     =
|=20
+()()()----------()()()----------------------------------------------------=
+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** =
|
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>>            =
|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+