Ver Mensaje Individual
  #6 (permalink)  
Antiguo 26/08/2009, 12:27
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Problema Real

Es una opción muy factible jurena. Pero no crees que requiera de demasiados procesos para llegar a un mismo resultado? La que pongo en el post, realiza la misma tarea.

haciendo un explain de las consultas, creo que puede ser mas optima la priimera opción. O que opinas?
Código sql:
Ver original
  1. mysql> EXPLAIN SELECT t1.doc,t1.nombre,t1.jefe FROM empleados t1 INNER JOIN (SELECT Jefe FROM empleados GROUP BY Jefe HAVING COUNT(*) > 0) t2 ON t1.doc=t2.jefe;
  2. +----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
  3. | id | select_type | TABLE      | TYPE   | possible_keys | KEY     | key_len | REF     | ROWS | Extra       |
  4. +----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
  5. |  1 | PRIMARY     | <derived2> | ALL    | NULL          | NULL    | NULL    | NULL    |    3 |             |
  6. |  1 | PRIMARY     | t1         | eq_ref | PRIMARY       | PRIMARY | 4       | t2.Jefe |    1 |             |
  7. |  2 | DERIVED     | empleados  | INDEX  | NULL          | jefe    | 5       | NULL    |    5 | USING INDEX |
  8. +----+-------------+------------+--------+---------------+---------+---------+---------+------+-------------+
  9. 3 ROWS IN SET (0.00 sec)
  10.  
  11. mysql> EXPLAIN SELECT doc, Nombre, Jefe FROM empleados WHERE
  12. Doc IN(SELECT DISTINCT Jefe FROM empleados WHERE jefe IS NOT NULL)
  13. UNION SELECT doc, Nombre, Jefe FROM empleados WHERE jefe IS NULL ORDER BY Jefe;
  14. +----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
  15. | id | select_type        | TABLE      | TYPE           | possible_keys | KEY  | key_len | REF   | ROWS | Extra                    |
  16. +----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
  17. |  1 | PRIMARY            | empleados  | ALL            | NULL          | NULL | NULL    | NULL  |    5 | USING WHERE              |
  18. |  2 | DEPENDENT SUBQUERY | empleados  | index_subquery | jefe          | jefe | 5       | func  |    2 | USING INDEX; USING WHERE |
  19. |  3 | UNION              | empleados  | REF            | jefe          | jefe | 5       | const |    1 | USING WHERE              |
  20. | NULL | UNION RESULT       | <union1,3> | ALL            | NULL          | NULL | NULL    | NULL  | NULL | USING filesort           |
  21. +----+--------------------+------------+----------------+---------------+------+---------+-------+------+--------------------------+
  22. 4 ROWS IN SET (0.00 sec)
  23.  
  24. mysql>

lastimosamente no cuento con una tabla grande de este tipo para hacer las respectivas pruebas de rendimiento
__________________
Without data, You are another person with an opinion.
W. Edwads Deming