Ver Mensaje Individual
  #1  
Antiguo 26-05-2008
Angel Fernández Angel Fernández is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia - España
Posts: 141
Reputación: 20
Angel Fernández Va por buen camino
Consulta muy sencilla, extrañamente lenta

Saludos al foro.

Quería consultaros un problemilla muy tonto que tengo pero que no acierto a ver cual podría ser el origen. Me explico: Tengo una base de datos enorme donde se recogen datos de unos sensores. Tengo una tabla de sensores con la siguiente estructura:

Nombre del Campo Tipo Not null Explicación
-------------------------------------------------------------------------------------------------
IDSENSOR * INTEGER TRUE (Clave primaria,autoincremento)
IDPROYECTO INTEGER TRUE (Apunta a la tabla de proyectos)
IDTIPOSENSOR * INTEGER TRUE (Apunta a la tabla tiposensor)
REF CHAR(6) TRUE (Referencia corta) *
UBICACION VARCHAR(150) FALSE (Lugar donde se encuentra, no obligatorio)
NOMBRE * VARCHAR(50) FALSE (Nombre largo, no obligatorio)
ACTIVO SMALLINT TRUE (0 Inactivo, 1 Activo)
BUENAFUNCION SMALLINT TRUE (0 No va bien, 1 Va bien)

* = indica que hay índice ascendente.

Un ejemplo de los datos que contiene:

IDSENSOR IDPROYECTO IDTIPOSENSOR REF UBICACION NOMBRE ACTIVO BUENAFUNCION
------------------------------------------------------------------------------------------------------------------------------------------------
184 1 1 TEM001 Azotea SENSOR TEMPERATURA 001 1 1
185 1 1 TEM002 Azotea SENSOR TEMPERATURA 002 1 1
186 1 1 TEM003 Azotea SENSOR TEMPERATURA 003 1 1
187 1 1 TEM004 Azotea SENSOR TEMPERATURA 004 1 1
188 1 1 TEM005 Azotea SENSOR TEMPERATURA 005 1 1
189 1 1 TEM006 Azotea SENSOR TEMPERATURA 006 1 0
190 1 1 TEM007 Azotea SENSOR TEMPERATURA 007 1 1

Y así hasta 70 registros (setenta, menos de cien, no setenta mil, es decir, muy pocos registros).

La tabla Tiposensor tiene la siguiente estructura:

Nombre del Campo Tipo Not null
-------------------------------------------------------------------------------------------------
IDTIPOSENSOR * INTEGER TRUE (clave primaria, autoincremento)
TIPO_LARGO * VARCHAR(20) TRUE (Nombre largo, obligatorio)
TIPO* CHAR(3) TRUE (Nombre corto, obligatorio) *
ACTIVO SMALLINT TRUE (1=activo, 0=no activo) (No lo uso)
IDTABLADATOS * INTEGER TRUE (Apunta a otra tabla)
IDTIPODATO * INTEGER TRUE (Apunta a otra tabla)

* = indica que hay índice ascendente.

Esta tabla sólo tiene 6 registros:

IDTIPOSENSOR TIPO_LARGO TIPO ACTIVO IDTABLADATOS IDTIPODATO
----------------------------------------------------------------------------------------------------------------
0 INDEFINIDO NOT 1 0 0
1 TEMPERATURA EN ºC TEM 1 1 2
2 HUMEDAD HUM 1 1 1
3 LLUVIA LLU 1 2 4
4 ENCHARCAMIENTO ENC 1 2 5
5 TEMPERATURA EN ºK TEK 1 1 3

Y en fín, el problema:
Tengo un MDODataSet con el siguiente SelectSQL: 'select * from sensores order by ref' Esto me devuelve 70 registros y tarda ¡30 segundos!
Pero esta tardanza ocurre sólo la primera vez que se abre el MDODATASET; las siguientes veces tarda menos de 1 segundo que es lo lógico y esperable.
El MDODATASET tiene los campos de datos y además un campo lookup que apunta a la tabla TipoSensor para traer el tipo de sensor, y dos campos calculados que son del tipo booleano para convertir los campos ACTIVO y BUENAFUNCION al tipo true/false.

He probado de todo: quitar la apertura del mdodataset del evento formshow, quitar los campos calculados y lookup .... y ya no se me ocurre nada más.
Estoy desesperadico.

¿Alguna idea? ¿A alguien le ha pasado algo parecido? ¿Es un bug de los MDO?

Uso D7, Firebird 2.0 y componentes MDO.

Gracias de antemano.

PD: Perdón por el rollo.
Responder Con Cita