FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ADS -> Optimizacion de consultas SQL
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Fri Apr 28, 2006 02:57 PM
Hola,

El siguiente codigo es ejecutado con FWH y funciona perfecto, pero si ejecuto una query con ARC32 ( Tools->Native SQL) el resultado es muchiiisimo mas rapido. Mi Pregunta es: Se puede optimizar la ejecucion de las funciones de SQL en ADS ?


#include "ads.ch"
#include "fivewin.ch"	  

*--------------
FUNCTION main()
*--------------
    LOCAL cServer  := "\\BSD001\Test"
    LOCAL consulta := "Select * from Test where age > 90"
    LOCAL cTxt     := ''

    RddRegister("ADS",1)
    RddSetDefault("ADS")
    AdsSetServerType ( 2 )
    SET FILETYPE TO CDX


    AdsConnect( cServer , 2 )

    IF ! ADSCreateSQLStatement("SQLarea",2)  // 2 == ADS_CDX
       MsgAlert( "ADSCreateSQLStatement('SQLarea',2)" )
       RETU .F.
    ENDIF

    IF ADSExecuteSQLDirect( consulta )

       FOR nI := 1 TO 20

           cTxt += sqlarea->first + ' ' + sqlarea->last + ' ' + sqlarea->street + ' ' + str( sqlarea->age ) + CRLF
                   sqlarea->( DbSkip() )

       NEXT

       msgInfo( cTxt )

    ENDIF

    AdsDisconnect(AdsGetConnectionHandle())

    sqlarea -> ( DBCLOSEAREA() )

RETU NIL


Muchas gracias
Carlos.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 189
Joined: Mon Nov 07, 2005 07:36 PM
ADS -> Optimizacion de consultas SQL
Posted: Fri Apr 28, 2006 04:40 PM

El server que tu indicas en una carpeta de tablas DBF ?

Julio Gonzalez V.

RANDOM S.A.

SISTEMICA S.A.
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Sun Apr 30, 2006 07:58 AM

Hola,

No entiendo tu pregunta. Se pretende trabajar contra servidor, no en modo local.

Saludos.
C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 189
Joined: Mon Nov 07, 2005 07:36 PM
ADS -> Optimizacion de consultas SQL
Posted: Sun Apr 30, 2006 06:19 PM

no importa que sea un server ADS, la pregunta es si las tablas son archivos DBF o si es un server SQL, por ejemplo Microsoft SQL Server.
Eso.

Julio Gonzalez V.

RANDOM S.A.

SISTEMICA S.A.
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
ADS -> Optimizacion de consultas SQL
Posted: Mon May 01, 2006 01:49 AM
dbzap wrote:no importa que sea un server ADS, la pregunta es si las tablas son archivos DBF o si es un server SQL, por ejemplo Microsoft SQL Server.
Eso.


Si es Advantage, son base de datos DBF, advantage te da la ventaja SQL.
William, Morales

Saludos



méxico.sureste
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Tue May 02, 2006 06:38 AM

Hola,

No me explicado bien. Voy a intentarlo de nuevo :roll:

Quiero saber si contra un server ADS, y usando las funciones propias de ADS, como ADSExecuteSqlDirect(), se puede alcanzar la velocidad de ejecucion del ACE32 cuando se realizan las querys.

A modo de ejemplo, el test de arriba se me ejecuta en aproximadamente 6 segundos con la base test.dbf y 100000 registros, mientras que con Ace32 esta 0.7 seg. Partiendo de la base, que Ace32 no utiliza ni ODBC ni otros componentes de acceso a datos, (q yo sepa), me gustaria saber la diferencia.

No lo he probado via ODBC, pero la idea es usar solo las funciones ACE.

Gracias por vuestro soporte.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
ADS -> Optimizacion de consultas SQL
Posted: Tue May 02, 2006 12:10 PM

Hola,

probaste con utilizar otro formato para el resultado

ADSCreateSQLStatement("SQLarea",n) 1,2,3

seria interesante ver como cambia esto, por otra parte el tiempo que das, lo 6 segundos es tomando en cuenta el tiempo de conexion previa a la consulta o solo la consulta

saludos

Marcelo

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Tue May 02, 2006 12:20 PM
Hola Marcelo,

1.- El 2Âş parametro es el tipo de tabla, siendo 2 == DBF_CDX (eso creo, ahora me haces dudar)

2.- El tiempo aprox. lo calculo sencillamente

nInicio := Seconds()
ADSExecuteSQLDirect( consulta )
MsgInfo( Seconds() - nInicio )


No se si la gente esta usando esta funcion contra servidor que va de maravilla, pero es q jode ver como en el ARC32 vuela, al lado de la tuya. Pensaba que ARC32 usaba las mismas funciones del ACE.

Gracias por tu ayuda.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
ADS -> Optimizacion de consultas SQL
Posted: Tue May 02, 2006 03:22 PM
Carles wrote:Hola Marcelo,

1.- El 2Âş parametro es el tipo de tabla, siendo 2 == DBF_CDX (eso creo, ahora me haces dudar)


Era para saber si afectava en que formato recibes el resultado, pueda que alli esta algo de la respuesta


No se si la gente esta usando esta funcion contra servidor que va de maravilla, pero es q jode ver como en el ARC32 vuela, al lado de la tuya. Pensaba que ARC32 usaba las mismas funciones del ACE.


Yo, utilizo SQL de manera nativa con ADS, es realmente comodo y muy potente.

Haber que resultados sacas de tu investigacion, por otra parte estaria analizar el codigo fuente de ARC y/o hacer un peque~no ejemplo con Delphi que haga la misma consulta para ver si se optiene o no la misma velocidad del ARC, si es asi, significaria que el problema esta en la implementacion del API de ADS en xHarbour o Harbour o que falta algun parametro u opcion en la aplicacion, quien sabe RF pueda darnos ideas

saludos

Marcelo
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
ADS -> Optimizacion de consultas SQL
Posted: Tue May 02, 2006 03:30 PM

Carles:

Una pregunta.... y creo que tiene que ver con la forma en que estas trabajando.... Âżtienes indice asignado para esa tabla DBF ?

Saludos

R.F.
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Wed May 03, 2006 07:42 AM
Hola a todos,

Marcelo:

1.- He probado en ADSCreateSQLStatement("SQLarea",2), todos los parametros posibles, y realmente solo funciona con el 2 (ADS_CDX)

Yo, utilizo SQL de manera nativa con ADS, es realmente comodo y muy potente.


Pero de manera nativa, te refieres instalando el driver ODBC, no ?. Justamente, quiero evitar q el cliente se tenga de instalar y parametrizar el Odbc.

Quizas otra manera seria probar la coña del ADO, pero me parece q tambien implica instalar en cada cliente algun componente, no se , no experimentado. Habeis hecho alguna prueba con ADO con reultado satisfactorio ? (siempre hablamos de ADS, eh :-) )

Rene:

El ejemplo de arriba tanto si lo ejecutas con una tabla con indice como sin indice, tarda lo mismo. Uhmm no se. Quizas me estoy metiendo en un tema q no tiene soluciĂłn.

Todo parte de la idea que desde un solo exe, obtener esta potente funcionalidad como hace el ARC32. Tendre obsesion con este tipo :-)

Gracias por vuestras ideas.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Wed May 03, 2006 10:10 AM

Hola,

He instalado el ODBC de ADS para realizar test. El resultado sobre 100000 registros es para la Sql "Select first, last, age from test where age > 90"

1.- Si quiero los una pagina de 30 registros -> 0.2 seg.
2.- Si selecciono todos los registros de la condicion (11.000 +-) -> 2.5 seg.

El driver de ADS realmente va muy rapido, pero se sale del objetivo de jugar con las funciones nativas.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
ADS -> Optimizacion de consultas SQL
Posted: Wed May 03, 2006 11:26 AM

Hola Carles,

Por dos motivos va mas rapido ARC32 que el programa.

  1. La consultas SQL "Select * from Test where age > 90" no necesita hacer una sql. Lo que hace es abrir la tabla ADT con un filtro. Se puede comprobar si hace esto, porque los nombres de los campos aparecen en mayĂşscula. En caso contrario, necesita ejecutar la SQL, se ven en minĂşscula

  2. y mas importante. En caso de tener que hacer la SQL devuelve sĂłlo los primeros 20 +- registros. Al dar Ctrl+Fin calcularĂ­a toda la sql y se verĂ­a el tiempo real que tarda.

Recuerda que al ejecutarlo con ADSExecuteSQLDirect, lo que tiene que hacer es ejecutar toda la sql, no sĂłlo los 20 primeros registros y introducirlos en un tabla temporal para poder usarlo en el programa.

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADS -> Optimizacion de consultas SQL
Posted: Wed May 03, 2006 11:56 AM
Hola Fernando,

Por dos motivos va mas rapido ARC32 que el programa.

1. La consultas SQL "Select * from Test where age > 90" no necesita hacer una sql. Lo que hace es abrir la tabla ADT con un filtro...


Entiendo q ARC32 abre una tabla en formato ADT ? Como puede ser si la tabla es una dbf normal y corriente ? No se si me explico. Cuando tu haces una query normal...



arc32 no creo q abra la dbf y le pone un filtro. O si ? Tampoco creo q abra usando ODBC porque si no tienes el driver instalado funciona igual. Mi pregunta es, como poder emular la velocidad de arc32 sin tener q usar ODBC y ADO. Crees q se puede ?

Gracias por tu opinion
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
ADS -> Optimizacion de consultas SQL
Posted: Wed May 03, 2006 04:51 PM
Hola,

Aunque lo que abras sea una dbf, lo que abres es la DBF, no una consulta sobre la DBF. Esto lo hace si trabajas en modo Server, no en modo local.

Comprueba como, por ejemplo, te deja cambiar los valores que te ha devuelto. Si fuera una SQL no permitirĂ­a cambiar los valores.

Prueba ejecutando:
"Select {STATIC} frist, last, street, age FROM test WHERE age>90".
o cualquier consulta que unas tablas, esas no se dejan editar.

Mi pregunta es, como poder emular la velocidad de arc32 sin tener q usar ODBC y ADO. Crees q se puede ?

Yo no conseguĂ­ lograrlo.

De todas formas, recuerda que tiene que generar una DBF temporal para devolverto en el alias que indicas, y ahí es donde esta el tiempo. Cuando mas campos pidas y mas registros tenga de devolver mas lento irá.

Mi consejo:
Pide los campos indices, Ăşnica y exclusivamente en la consulta. Luego el resto de los datos optenlos a traves de buscarlos en la DBF original
LOCAL consulta := "Select frist from Test where age > 90"
FOR nI := 1 TO 20 
     Test->( DbSeek(SqlArea->Frist) )
     cTxt += sqlarea->first + ' ' + Test->last + ' ' + Test->street + ' ' + str( Test->age ) + CRLF 
     sqlarea->( DbSkip() ) 
NEXT

Siendo "Test" el alias de la dbf previamente abierta sin ningun tipo de filtro aplicado y "frist" el campo indice de la misma
Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos