Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/05/2010, 16:00
Avatar de Porlachucha
Porlachucha
 
Fecha de Ingreso: noviembre-2008
Ubicación: Santiago
Mensajes: 172
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: Optimizar Consulta SQL

No soy muy experto, pero creo que podrias mejorar bastante en 2 puntos:

1. para calcular la edad, mejor utiliza DateDiff, en vez del codigo de calculo de meses y años que utiliza tu SP
ejemplo

select DateDiff(year, FechaNacimiento, FechaActual)

2.- puedes usar inner join en vez de select para obtener la informacion de las demas tablas. el inner hace lo mismo que tus select anidados, pero es mas eficiente, ademas, al hacer el ON, ya estas haciendo un where implicito que no necesitas filtrar despues. esto te ahorra una buena cantidad de registros que despues de todas formas eliminas

de esta forma

Código:
SELECT	P.COD_PERSONA,
		P.APE_PATERNO, 
		P.APE_MATERNO, 
		P.NOMBRES, 
		P.SEXO ,
		datediff(year, FEC_NACIMIENTO, TimeStamp) as edad,
		UB.REGION  AS LUGAR_NAC,
		D.NRO_DOCUMENTO AS DNI,
		R.NRO_RUC AS RUC,
		E.AUTOGENERADO as ESSALUD,
		
FROM TB_PERSONA P
	inner join UBIGEO UB on D.COD_PERSONA=P.COD_PERSONA
							UB.COD_UBIGEO = D.UBIGEO_NAC
	inner join DNI_PERSONA D on D.COD_PERSONA=P.COD_PERSONA
	inner join RUC_PERSONA R R.COD_PERSONA=P.COD_PERSONA
	inner join ESSALUD_PERSONA E on  E.COD_PERSONA=P.COD_PERSONA
los inner tienen la particularidad que puedes decidir que accion tomar, dependendo de que lado de la consulta se encuentre disponible, por ejemplo, si la region donde nacio la persona no existe, (que es un dato al lado derecxho de la consulta) puedes pespecificar con right join que no aparezca el registro si el dato no esta. Tb puedes hacer al contratrio con left outer join

espero te sirva de algo
slds
plch
__________________
Nada mas patetico que "detestar" a Intel o Microsoft o Windows o Apple ... apuesto que eres el tipico teton espinilluo y pajero que usa Linux para sentirse capo ...

Última edición por Porlachucha; 17/05/2010 a las 16:01 Razón: me falto especificar las clausulas del where en la consulta