Re: lpad vs ||

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Andrés P(dot)P(dot) <solopostgres(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: lpad vs ||
Date: 2010-09-03 18:19:14
Message-ID: 1283537619-sup-2188@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Excerpts from Andrés P.P.'s message of jue sep 02 21:45:30 -0400 2010:
> Estimados listeros
>
> Necesito confirmación a lo siguiente: hice dos updates sobre tablas cuya
> definición y carga fueron iguales:
> *En Desarrollo :*
>
> upd1) update tabla1 set valor = lpad(substr(valor,4,9),11,76) where
> length(valor)=12; 21867.891 ms
> upd2) update tabla2 set valor = 76||substr(valor,4,9) where
> length(valor)=12; *21119.145 ms*
>
> (valor es la PK de la tabla,varchar y no hay más índices)
>
> Ambas tablas de pruebas tienen *1.300.000* registros, 650.000 tienen un
> length(valor)=12 y los 650.000 restantes un length(valor)=13.

Los dos update cambian los registros con length(valor) = 12. ¿Hay un error?

> *Real :*
>
> En producción la tabla es de *13.000.000* de registros. Sobre ésta debo
> hacer 2 updates.. para length(valor)=12 y 13.
> El server está levemente mejor equipado en procesadores y ram que en
> desarrollo.(y asumiendo lo mismo en velocidad de disco).
> Preguntas:
>
> - Asumo que el upd2 seguirá siendo más rápido?

No

> - Dejo el vacuum para el final?.. o después del 2do. update?

Te conviene antes del segundo update. Si no hubiera índice en la
columna que estás cambiando, daría lo mismo (debido a HOT), pero no es
el caso. Quizás te convenga botar los índices de la tabla antes de
hacer los update, luego vacuum, luego reconstruir los índices.

> - Asumo que el tiempo será mayor en la misma proporción del nuevo nro. de
> registros??. Osea puedo pensar que demorará aprox. *200000* ms??..

Mídelo, 200 segundos no es tanto. Pero yo creo que debería tardar más.

> y lo último: tienen alguna alternativa para estos updates en 8.2.5 ??..
> vi por ahí una línea para hacer un update único mezclando en el set el
> lenght y el substr.... pero no me pareció eficiente..

Si vas a cambiar los mismos registros, te conviene hacerlo todo de una
vez.

--
Álvaro Herrera <alvherre(at)commandprompt(dot)com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

  • lpad vs || at 2010-09-03 01:45:30 from Andrés P.P.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sergio Valdes Hurtado 2010-09-03 18:55:37 Off Topic - Herramienta para consulta a bases de datos
Previous Message German Gomez 2010-09-03 06:35:02 RE: d