Gente cuelo una idea que podria ser beneficiosa, si el '99' es un código o alguna condicion que establezca separación en tus datos algo que andaria de maravillas seria hacer un indice con where ,supongamos que la tabla es clientes, y el campo id,
create index i_99 on clientes( id, nombre_cliente) where "SUBSTR(id,1,2)='99'" ; "chequear sintax" seguramente posiblemente el plan se vea tentado a usar este indice . quizas con el like no funciones o quizas tratar de poner en el where del indice like pero creo que like no lo indexa. mis 2cvos salu2 jmdc. 2012/6/25 Armando Venegas Pérez <[email protected]> > 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: [email protected] > To: [email protected]; [email protected]; > [email protected] > > > 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: [email protected] > [email protected] > > PHP Spanish Docs translator member. > http://www.php.net/manual/es/index.php > >
