Informix - Duda acerca del Count

 
Vista:

Duda acerca del Count

Publicado por XW (1 intervención) el 09/09/2005 18:47:44
Hola!

Hize un procedimiento donde tengo muchos select count(*) from .. porque tengo que checar en muchas ocasiones si un registro no esta repetido en una tabla a fin de insertarlo o no, tambien tengos muchos ifs y mi duda era si eso alenta mi proceso ya que para checar 136 registros (cada registro pasa por todos esos counts e ifs aunque no necesaraimente por todos pero si por la mayoria ) se tarda 2 horas. Quisiera saber ustedes que opinan que sea; si los count, los if o de plano el servidor en el que corre; yo pense que podrian ser los count y no se si hay una forma menos tardada de checar si existe un registro en una tabla o no. Mi porcedimiento solo tiene aproximadamente 400 lineas yo he corrido procesos en servidores Sun y no tardan tanto; este procedimiento lo corri en un servidor IBM pero no se que caracteristicas tenga, no se si sea el servidor, o yo tengo que optimizar de alguna forma mi procedimiento.

Bueno, ojala me puedan auxiliar; se los agradecere mucho.
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:Duda acerca del Count

Publicado por Gabriela (15 intervenciones) el 12/09/2005 15:26:14
Porque no le pones solamente

Select * from ......
where .........

If Status = NotFound Then -> Con esto sabes si el registro no lo encuentra
Inserta registro
....................
End If

Ahora el proceso anterior es por si no tienes mas de un registro repetido en la tabla, si no es asi lo puedes realizar

Declare c_cursor cursor for
Select * from .....
where ......
Open c_cursor
Fetch c_cursor into variable
If Status = NotFound Then
Inserta Registro
........
End If

No se que tantos If Tengas, si gustas mandame tu programa y ojala te ayude a optimizar tu procedimiento

Pero lo que te pongo anteriormente es muy util, yo lo uso mucho.

Aunque se me hace mucho tiempo el que se tarda de todos modos y no creo que sea por los count(*), pero es mas facil utilizar el if status = notfound, porque son muy poquitos registros.

Tal vez lo que te falte son indices en las tablas
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:Duda acerca del Count

Publicado por josem (9 intervenciones) el 04/10/2005 00:22:17
Si tienes una version de informix 7 o superior lo que puedes hacer es lo siguiente desde el dbaccess

set explain on;

select count(*) from tabla

Y le das Run, la sentencia set explain genera un archivo llamado sqexplain.out, si tienes la BD con linux/unix
le das un signo de admiracion para que te deje ejecutar por linea de comandos y despues le haces un vi al archivo mencionado.

!vi sqexplain.out

El contenido del archivo es algo asi:

QUERY:
------
select * from tabla

Estimated Cost: 2
Estimated # of Rows Returned: 27

1) informix.indetmovin: SEQUENTIAL SCAN

el costo de un query efectivo es de 1
y en este caso me muestra que la busqueda se hizo de manera secuencial.

ESTO SIRVE PARA DETERMINAR CUAL QUERY ESTA MAL HECHO Y EL COSTO QUE LE REPRESENTA A LA BASE DE DATOS.


NOTA: en windows no se como seria pero imagino que las sentencias funcionan y deberas ver el alchivo con word o no se.
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:Duda acerca del Count

Publicado por Jaime Arvizu (3 intervenciones) el 16/09/2005 08:54:28
XW

Coincido con Gabriela, si pudieras postear tu codigo y la estructura de tus tablas asi como los indices talvez se podria hacere un diagnostico de tu problema, asi con los datos que envias no creo que se pueda elaborar un diagnostico.

Te recomiendo que intentes el uso de constrains en el diseño de tu bd, esto te agiliza en gran manera tanto las busquedas como las validaciones en el caso de inserciones, es decir obligan a que mejores tu tecnica de programacion.

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