Ver Mensaje Individual
  #20 (permalink)  
Antiguo 09/07/2008, 19:03
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema al consultar con una base datos en MySql

En realidad, lo que devuelve el EXPLAIN es bastante simple:
id: ID de referncia del pinto de inicio en la consulta: 1.
select_type : Tipo de Select realizado. SIMPLE (una tabla con otra en forma directa).
table: Nombre de la tabla usada.
type: Tipo de tabla. REF (referenciada) es una tabla de existencia real.
possible_keys: Claves posibles para definir índices, según el resultado obtenido. En este caso sugiere construir un índice sobre CED.
key: Campo usado como clave o clave de índice usado en el proceso: CED.
key_len: Longitud de la clave usada en bytes. la mayor o menor longitud afecta la eficiencia de la consulta.
ref : A qué tabla se referencia: 1.
rows: Catidad de registros devueltos o procesados en la consulta.
Extra: Info extra. En este caso indica cuál es la cláusula determinante.

Respecto al resultado devuelto, presta mucha atención a la última línea:
Cita:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE empleado_fijo ref CED CED 53 const 1 Using where
1 SIMPLE empleado_contratado ref CED CED 53 const 1 Using where
1 SIMPLE empleado_suplente ref CED CED 53 const 1 Using where
1 SIMPLE obrero_contratado ref CED CED 53 const 1 Using where
1 SIMPLE obrero_suplente ref CED CED 53 const 1 Using where
1 SIMPLE obrero_fijo_2008 ALL NULL NULL NULL NULL 56200 Using where
.
Eso está diciendo que:
1. no pudo discriminar por ningún índice el contenido de la tabla obrero_fijo_2008, por lo que debió usarla barriendola completamente (ALL). Algo muy ineficiente.
2. El punto de referencia entre las tablas dio resultados nulos. No encontró ningún dato o el dato estaba en NULL. Ineficiente.
3. No pudo determinar claves porque el campo de referencia terminó en NULL.
4. Como consecuencia de lo anterior la longitud de la posible clave también es nulo.

En definitiva: En la consulta tal y como la has hecho, no hay en la tabla obrero_fijo_2008 ningún registro que tenga en DEC el número 3139573, por lo cual la consulta no devuelve nada.
Esto dice dos cosas:
1. No se registró ningún obrero fijo en este año con ese CED.
2. El obrero existe, pero el campo está nulo.

Si no eres tu quien debe verificar los datos entrantes, entonces hay que comunicarle a los programadores de la aplicación que ingresa los datos que ese datos es MANDATORIO y no debe jamás quedar nulo, porque de lo contrario genera problemas en los reportes.
Respecto a qué puedes hacer, te sugeriría hacer una verificación de la estructura de los datos entre todas las tablas, para ver si existe alguna combinación de campos que puedas usar como clave alternativa y que te sirva para realizar un UPDATE a los datos faltantes, de modo de corregir esa inconsistencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)