Hola Gilberto. Espero que mis comentarios ayuden a resolver tu necesidad.
Para comenzar, una de las cosas más pesadas para cualquier BD es el UPDATE, así que no te preocupes. Si es más rápido: "SUBSTR(id,1,2)='99'" que "id LIKE '99%'" por milésimas de segundo. Mejora pero no es de gran ayuda a tu problema. Algo mas útil sería algo así "id_ini=99". Es decir agregar un campo adicional donde guardes los primeros dos dígitos en valor numérico, y además agregarle un índice a este campo. Pero es algo que tendrás que ver con tu DBA y con tus compañeros de programación (Si es que existen). Otra cosa es el comparar "nom_cli='UN VALOR ALFANUMÉRICO'". Si puedes y tienes, sería mejor comparar "id_cli=77594830". Es más rápido un filtro por número, que por alfanumérico. Si no tienes un ID para CLIENTE, entonces agrega un índice a NOM_CLI para que la búsqueda sea más rápida. Otra cosa sería el orden del WHERE, escribe los filtros de menor a mayor tiempo de consulta. Es decir, al tanteometro cual filtro regresa más rápido el resultado: "nom_cli='HOSTAL CABALLITO TOTORA'" ó "SUBSTR(id,1,2)='99'" , ese debe ir primero. Si logras crear el campo "id_ini" del tipo numérico y con índice, pon este primero. ------------------ Si quieres algo extremo es crear una nueva tabla con los valores actualizados, algo así: (Un INSERT es más rapido) CREATE TABLE cat_lote_2 AS SELECT campo1, campo2, CASE WHEN SUBSTR(ID,1,2)='99' THEN '13'||SUBSTR(ID,2) ELSE ID END AS campo3, campo4, campo5, etc.... FROM cat_lote; (Lo anterior si aplica a tus necesidades) Una vez creada esta tabla, le agregas sus índices y llaves primarias y foráneas, y la renombras como la tabla correcta. ------------------ Otra cosa por experiencia es el espacio disponible en tu Disco Duro. Por último y por mi experiencia, siento que ejecutar un lote de SQL es más rápido desde PSQL que desde PgAdmin Espero te pueda ayudar. Saludos Date: Mon, 25 Jun 2012 10:37:56 -0500 Subject: [pgsql-es-ayuda] ejecucion de sentencias update de manera mas veloz From: jvenegasp...@gmail.com To: pgsql-es-ayuda@postgresql.org; pgsql-es-fome...@postgresql.org; ar...@postgresql.org Buen dia a todos tengo una base de datos postgis que tienen la lotizacion de un poblado pues resulta que cada fila de los lotes tiene el nombre del cliente pero no su codigo para otras consultas administrativas que tenemos en otro sistema alfanumerico asi que exporte la lista de nombres y codigos del sistema transaccional en oracle para insertarle ese codigo a postgres usando excel para armar la consulta. las consultas que genero en excel quedan asi: UPDATE CAT_LOTE SET ID= '13010400060' WHERE NOM_CLI = 'HOSTAL CABALLITO TOTORA' AND ID LIKE '99%'; UPDATE CAT_LOTE SET ID= '13010400070' WHERE NOM_CLI = 'ARCILA GONZALES MARGOT IVONE' AND ID LIKE '99%'; UPDATE CAT_LOTE SET ID= '13010400080' WHERE NOM_CLI = 'LESCANO ALVA CARLOS FORTUNATO' AND ID LIKE '99%'; UPDATE CAT_LOTE SET ID= '13010400090' WHERE NOM_CLI = 'ARCILLA CACERES MICAELA' AND ID LIKE '99%'; UPDATE CAT_LOTE SET ID= '13010400100' WHERE NOM_CLI = 'ARCILLA JURADO ALBERTO' AND ID LIKE '99%'; y asi hasta 200 mil estas las pego en el pgadmin pero en bloques de 10000 porque si le pongo mas se cuelga y demora una hora mas o menos en ejecutar esa actualizacion. estoy usando postgres 9.1 sobre windows server 2003 alguna otra forma de hacer esto mas rapido usando el psql por consola no se alguna otra forma como seria? gracias por la atencion saludos -- José Mercedes Venegas Acevedo cel: Mov. 949808846 mails: jvenegasp...@php.net jvenegasp...@gmail.com PHP Spanish Docs translator member. http://www.php.net/manual/es/index.php