FoxPro/Visual FoxPro - Delete sql vfp9 sp2

   
Vista:

Delete sql vfp9 sp2

Publicado por Julio (26 intervenciones) el 17/03/2009 15:33:50
Buenas, tengo una rutina que desarrolle en visual foxpro 8 hace un par de años, en la que elimino de una tabla que tiene unos 50000 registros en función de una clave resultante de otra tabla, esta segunda genera unos 35000 registros que serán las claves a eliminar de la primera, simplemente la sentencia que tengo es la siguiente:

DELETE FROM datos!gastos WHERE dempid=0 AND "X"+ALLTRIM(cuendt)+"X"+ALLTRIM(cauxdt)+"X"+ALLTRIM(STR(montdt,20,6))+"X" IN (SELECT "X"+ALLTRIM(cuendt)+"X"+ALLTRIM(cauxdt)+"X"+ALLTRIM(STR(montdt,20,6))+"X" DISTINC FROM especiales!originales_productos)

Esta sentencia en visual 7 u 8 demora aproximadamente 7 segundos para marcar los registros a borrar, ahora cuando ejecuto en vfp9 la misma sentencia y con el mismo conjunto de datos demora 1 hora 20 minutos.

Alguien me puede orientar en cual es el problema y si tiene solución, de más está decir que se puede realizar una rutina para hacer lo mismo con un par de comandos propios de vfp, lo que me interesa conocer cual es el problema del cambio de rendimiento entre una versión y otra y si hay algún parámetro que estoy dejando de lado y hay que incluirlo con los comandos SQL?

Gracias, saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Delete sql vfp9 sp2

Publicado por Plinio (7771 intervenciones) el 17/03/2009 20:50:03
Es extraño, pero prueba poniendo SET ENGINEBEHAVIOR 70 antes de.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Delete sql vfp9 sp2

Publicado por JULIO (26 intervenciones) el 18/03/2009 12:02:03
Gracias por tu colaboración, en realidad no cambio en nada con el cambio de este parámetro, logré nuevamente realizar la operación en unos 7 segundos desdoblando el trabajo, primero genero un cursos con las claves a borrar y luego efectuó el borrado, de está manera mantiene la performance que tenía con el visual 8

SELECT "X"+ALLTRIM(cuendt)+"X"+ALLTRIM(cauxdt)+"X"+ALLTRIM(STR(montdt,20,6))+"X" DISTINC FROM especiales!originales_productos INTO CURSOR TEMP_ORIGINALES_PRODUCTOS

DELETE FROM datos!gastos WHERE dempid=0 AND "X"+ALLTRIM(cuendt)+"X"+ALLTRIM(cauxdt)+"X"+ALLTRIM(STR(montdt,20,6))+"X" IN (SELECT * FROM TEMP_ORIGINALES_PRODUCTOS)

No me gusta pero funciona, Gracias, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar