Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2010, 12:32
davicomeh
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 15 años
Puntos: 0
Ayuda con optimizacion de consulta

Tengo una tabla de usuarios, donde cada usuario esta relacionado a un usuario de la misma tabla (campo llamado idpadre)

De modo que se puede dar la siguiente Jerarquia:

-Administrador
-Supervisor
-Gerente
-Coordinador
-Asesor

Cada usuario tiene su propios registros capturados (en mi sistema son prospectos)

Tengo una consulta para sacar todos los prospectos de un usuario, y de todos sus subordinados. Es decir, yo Gerente veo todos mis registros, junto con los de mis Coordinadores asignados, junto con los de los Asesores asignados a mis Cordinadores....

La manera en que la tengo funciona, y sin problemas, solo que digamos tengo poco en sql y la manera en que la tengo se que no es la mas optima, ya que utilizo muchos select (como 11....) y tengo entendido que eso no es bueno....

Mi consulta es mas o menos la siguiente:
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[spObtenerProspectos]
  2. @IDUSUARIO          NUMERIC(18,0)
  3. AS
  4.  
  5. SELECT IDPROSPECTO
  6.  FROM prospectosnew
  7.  
  8.  WHERE PROSPECTOSNEW.IDUSUARIO IN (SELECT IDUSUARIO FROM USUARIOSNEW WHERE USUARIOSNEW.idpadre=@IDUSUARIO )
  9.                         OR PROSPECTOSNEW.IDUSUARIO IN (SELECT idUsuario FROM USUARIOSNEW
  10.                         WHERE IDPADRE IN ( SELECT idUsuario FROM usuariosnew WHERE idpadre=@IDUSUARIO))
  11.                         OR PROSPECTOSNEW.IDUSUARIO IN (SELECT idUsuario FROM USUARIOSNEW
  12.                         WHERE IDPADRE IN ( SELECT idUsuario FROM usuariosnew WHERE idpadre IN (SELECT IDUSUARIO FROM USUARIOSNEW WHERE USUARIOSNEW.idpadre=@IDUSUARIO)))
  13.                         OR PROSPECTOSNEW.IDUSUARIO IN (SELECT idUsuario FROM USUARIOSNEW
  14.                         WHERE IDPADRE IN ( SELECT idUsuario FROM usuariosnew WHERE idpadre IN (SELECT IDUSUARIO FROM USUARIOSNEW WHERE USUARIOSNEW.idpadre IN (SELECT IDUSUARIO FROM USUARIOSNEW WHERE USUARIOSNEW.idpadre=@IDUSUARIO))))
  15.                         OR PROSPECTOSNEW.IDUSUARIO=@IDUSUARIO

Mi tabla de usuarios no tiene mas de 100 registros

y la tabla de prospectos estamos hablando que pueden ser 10mil, 20mil, 30mil registros...

alguna manera en que pueda evitarme el uso de tantos select y optimizar mi consulta????