lentitud en consulta SQL

11/05/2010 - 13:42 por Edwin Duran | Informe spam
Saludos a todos

Estoy tratando de extraer informacion de una tabla libre que tiene
aproximado 52,000 registros, cuando hago la consulta con el codigo decrito
mas abajo esta tiene una duracion aproximado de dos minuto, nunca me habia
pasado esto,

Pon que puesde estar durando tanto?

La tabla que contine los 52,000 es Fileclock
Los dotos de los empleado Snbdemp
y los departementos Snbddpto

Gracias
SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;

Snbddpto.des_dep;

FROM ;

fileclock ;

INNER JOIN bdnomina!snbdemp ;

ON Fileclock.codigo = Snbdemp.cod_emp ;

left JOIN bdnomina!snbddpto ;

ON Snbdemp.dpto = Snbddpto.cod_dep;

WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;

AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;

ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;

Into Cursor temcumple

Preguntas similare

Leer las respuestas

#1 Edwin Duran
11/05/2010 - 15:14 | Informe spam
Como podria agregar un progressbar a la consulta



"Edwin Duran" escribió en el mensaje
news:
Saludos a todos

Estoy tratando de extraer informacion de una tabla libre que tiene
aproximado 52,000 registros, cuando hago la consulta con el codigo decrito
mas abajo esta tiene una duracion aproximado de dos minuto, nunca me
habia pasado esto,

Pon que puesde estar durando tanto?

La tabla que contine los 52,000 es Fileclock
Los dotos de los empleado Snbdemp
y los departementos Snbddpto

Gracias
SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;

Snbddpto.des_dep;

FROM ;

fileclock ;

INNER JOIN bdnomina!snbdemp ;

ON Fileclock.codigo = Snbdemp.cod_emp ;

left JOIN bdnomina!snbddpto ;

ON Snbdemp.dpto = Snbddpto.cod_dep;

WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;

AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;

ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;

Into Cursor temcumple


Respuesta Responder a este mensaje
#2 Luis Mata
11/05/2010 - 17:39 | Informe spam
cuando sea el doble de informacion sera el doble de lento, migra a sql.
Yo batalle buen tiempo con este problema ahora ya no no tengo..en Sql 2008

Luis

"Edwin Duran" escribió en el mensaje de noticias
news:
Saludos a todos

Estoy tratando de extraer informacion de una tabla libre que tiene
aproximado 52,000 registros, cuando hago la consulta con el codigo decrito
mas abajo esta tiene una duracion aproximado de dos minuto, nunca me
habia pasado esto,

Pon que puesde estar durando tanto?

La tabla que contine los 52,000 es Fileclock
Los dotos de los empleado Snbdemp
y los departementos Snbddpto

Gracias
SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;

Snbddpto.des_dep;

FROM ;

fileclock ;

INNER JOIN bdnomina!snbdemp ;

ON Fileclock.codigo = Snbdemp.cod_emp ;

left JOIN bdnomina!snbddpto ;

ON Snbdemp.dpto = Snbddpto.cod_dep;

WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;

AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;

ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;

Into Cursor temcumple


Respuesta Responder a este mensaje
#3 Edwin Duran
11/05/2010 - 18:03 | Informe spam
Gracia Luis

nunca he utilizado rushmore he leido y he echo prueba, y es casi el mismo
tiempo de tardanza puedes darme alguna sugerencia.



"Luis Mata" escribió en el mensaje
news:
cuando sea el doble de informacion sera el doble de lento, migra a sql.
Yo batalle buen tiempo con este problema ahora ya no no tengo..en Sql 2008

Luis

"Edwin Duran" escribió en el mensaje de
noticias news:
Saludos a todos

Estoy tratando de extraer informacion de una tabla libre que tiene
aproximado 52,000 registros, cuando hago la consulta con el codigo
decrito mas abajo esta tiene una duracion aproximado de dos minuto,
nunca me habia pasado esto,

Pon que puesde estar durando tanto?

La tabla que contine los 52,000 es Fileclock
Los dotos de los empleado Snbdemp
y los departementos Snbddpto

Gracias
SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;

Snbddpto.des_dep;

FROM ;

fileclock ;

INNER JOIN bdnomina!snbdemp ;

ON Fileclock.codigo = Snbdemp.cod_emp ;

left JOIN bdnomina!snbddpto ;

ON Snbdemp.dpto = Snbddpto.cod_dep;

WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;

AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;

ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;

Into Cursor temcumple





Respuesta Responder a este mensaje
#4 Damian Eiff
14/05/2010 - 17:19 | Informe spam
Edwin:

Un detalle que puede hace que la consulta sea mas rapida, en la condición
WHERE TTOD(Fileclock.fecha) >= cdate1
AND TTOD(Fileclock.fecha) <= cdate2

La podes escribir como
WHERE Fileclock.fecha BETWEEN cdate1 AND cdate2

Si las variables cdate1, cdate2 son del tipo Date o DateTime y con eso
te ahorras la conversión del tipo de dato para cada comparación que
tenga que hacer el motor por cada registro que coincida. Esto es valido
tanto para bases Nativas como cualquier SGBD.

Otro detalle que podes revisar es si los campos de las tablas que estan
dentro de la base de datos y utilizas en el Join estan indexados.


Saludos

On 11/05/10 16:07, Edwin Duran wrote:
Que tal amigos, encontre la solucion y lo hace en 3 ses, tube que
hacerlo a la antigua, con dos SQL, uno para traer los datos que tiene
mas registros( Fileclock) y relacionarlos con los demas datos que me
interecen mirar codigo debajo
Saludos

SELECT Fileclock.CODIGO, Fileclock.fecha;

FROM FORCE bdnomina!fileclock WHERE TTOD(Fileclock.fecha) >= cdate1;

AND TTOD(Fileclock.fecha) <= cdate2 INTO CURSOR TMP

SELECT TMP.CODIGO, TMP.fecha, SNBDEMP.nombre,Snbdemp.dpto,Snbddpto.des_dep;

FROM FORCE TMP, SNBDEMP, Snbddpto WHERE TMP.CODIGO= SNBDEMP.cod_emp AND
Snbdemp.dpto = Snbddpto.cod_dep AND &lCod_dep_ini ;

INTO CURSOR TMPFileclock GROUP BY Snbdemp.dpto, TMP.CODIGO,TMP.fecha

"Edwin Duran"
<mailto: escribió en el mensaje
news:
> Saludos a todos
>
> Estoy tratando de extraer informacion de una tabla libre que tiene
> aproximado 52,000 registros, cuando hago la consulta con el codigo
decrito
> mas abajo esta tiene una duracion aproximado de dos minuto, nunca me
habia
> pasado esto,
>
> Pon que puesde estar durando tanto?
>
> La tabla que contine los 52,000 es Fileclock
> Los dotos de los empleado Snbdemp
> y los departementos Snbddpto
>
> Gracias
> SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;
>
> Snbddpto.des_dep;
>
> FROM ;
>
> fileclock ;
>
> INNER JOIN bdnomina!snbdemp ;
>
> ON Fileclock.codigo = Snbdemp.cod_emp ;
>
> left JOIN bdnomina!snbddpto ;
>
> ON Snbdemp.dpto = Snbddpto.cod_dep;
>
> WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;
>
> AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;
>
> ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;
>
> Into Cursor temcumple
>
>
Respuesta Responder a este mensaje
#5 DAG
25/05/2010 - 11:22 | Informe spam
On 11 mayo, 13:42, "Edwin Duran" wrote:
Saludos a todos

Estoy tratando de extraer informacion de una tabla libre que tiene
aproximado 52,000 registros, cuando hago la consulta con el codigo decrito
mas abajo esta tiene una duracion aproximado  de dos minuto, nunca me habia
pasado esto,

Pon que puesde estar durando tanto?

La tabla que contine los 52,000 es Fileclock
Los dotos de los empleado Snbdemp
y los departementos Snbddpto

Gracias
SELECT Fileclock.codigo, Fileclock.fecha, Snbdemp.nombre, Snbdemp.dpto,;

Snbddpto.des_dep;

FROM ;

fileclock ;

INNER JOIN bdnomina!snbdemp ;

ON Fileclock.codigo = Snbdemp.cod_emp ;

left JOIN bdnomina!snbddpto ;

ON Snbdemp.dpto = Snbddpto.cod_dep;

WHERE TTOD(Fileclock.fecha) >= thisform.txtfec_ini.Value;

AND TTOD(Fileclock.fecha) <= thisform.txtfec_fin.Value ;

ORDER BY Snbdemp.dpto, Snbdemp.cod_emp, Fileclock.fecha;

Into Cursor temcumple



Debes usar Rushmore.
Para tu ejemplo, debes tener creados el indice del campo CODIGO en
filelook , y en la tabla snbddpto el indice como cod_dep. Esto
arregla el primer problema, usar rushmore con el JOIN
Luego tienes tu condicion WHERE. Utiliza BETWEEN y create un índice en
FILECLOCK del campo FECHA.
Para ver qué tal optimizas. Utiliza ? SYS(3054,12) y Foxpro te dirá
que tal te funciona el índice.
Ojo con índices compuestos, fox es un poco "tonto" y no se da cuenta
que quizas compares 2 campos por separado y que existe un indice que
es la suma de ambos. En tal caso, debees crear un indice que sea la
suma de los dos campos, y luego al hacer la consulta, debe ponerse
exactamente igual que como el índice está creado. por ejemplo: Where
campo1+campo2=lcvalor1+lcvalor2
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida