任何方式来提高这个商店程序的性能?

任何方式来提高这个商店程序的性能?

问题描述:

有什么办法可以改善这个存储过程的性能? 例如,在一个唯一语句(T-SQL)中组合两个更新子句。 BonosConvenio和CON_Convenio差不多5K行。任何方式来提高这个商店程序的性能?

create table #resultados (
     monto_deuda  float 
     ,Cuenta   float 
     ,Rut    varchar(10) 
     ,CodCONVENIO  varchar(4) 
     ,CONVENIO   varchar(50) 
     ,Bono    varchar(15) 
     ,MontoBono  float 
     ,ApellDeudor  varchar(100) 
) 
INSERT INTO #resultados(Cuenta,monto_deuda,Rut,CodCONVENIO,CONVENIO,Bono,MontoBono,ApellDeudor) 
select ATC_CTA_Correlativo, monto_deuda, RutDeudor, CodCONVENIO,'','',0,'' 
    from CartaCobProgramasCONVENIO 
    where Nomina = @Nomina 

UPDATE #resultados 
SET Bono=bc.Bono, 
    MontoBono=bc.Monto 
FROM BonosCONVENIO bc 
WHERE bc.ATC_CTA_Correlativo=#resultados.Cuenta; 

UPDATE #resultados 
SET ApellDeudor=upper(rtrim(ltrim(Paciente.PAC_PAC_Nombre)) 
FROM BD_ENTI_CORPORATIVA..ATC_Cuenta Cuenta, BD_ENTI_CORPORATIVA..PAC_Paciente Paciente 
WHERE Cuenta.ATC_CTA_Correlativo=#resultados.Cuenta AND Paciente.PAC_PAC_Numero = Cuenta.PAC_PAC_Numero 

UPDATE #resultados 
SET CONVENIO=c.CON_CON_Descripcio 
FROM BD_ENTI_CORPORATIVA..CON_Convenio c 
WHERE c.CON_CON_Codigo =#resultados.CodCONVENIO 

SELECT * FROM #resultados ORDER BY Cuenta,Bono 
End 
+0

是的,做一些连接并做一个选择语句 - 不需要临时表和更新。 – SQLMason

试试这个:

SELECT 
    ccpc.ATC_CTA_Correlativo      Cuenta 
, ccpc.monto_deuda 
, ccpc.RutDeudor        Rut 
, ccpc.CodCONVENIO 
, c.CON_CON_Descripcio       CONVENIO 
, bc.Bono 
, bc.Monto          MontoBono 
, UPPER(RTRIM(LTRIM(Paciente.PAC_PAC_Nombre))) ApellDeudor 

FROM 
    CartaCobProgramasCONVENIO ccpc 
    INNER JOIN 
    BonosCONVENIO bc ON 
    ccpc.ATC_CTA_Correlativo = bc.ATC_CTA_Correlativo 
    INNER JOIN 
    BD_ENTI_CORPORATIVA..ATC_Cuenta Cuenta ON 
    ccpc.ATC_CTA_Correlativo = Cuenta.ATC_CTA_Correlativo 
    INNER JOIN 
    BD_ENTI_CORPORATIVA..PAC_Paciente Paciente ON 
    Cuenta.PAC_PAC_Numero = Paciente.PAC_PAC_Numero 
    INNER JOIN 
    BD_ENTI_CORPORATIVA..CON_Convenio c ON 
    c.CON_CON_Codigo = ccpc.CodCONVENIO 
WHERE Nomina = @Nomina; 

如果因为加入重复的记录,这是因为有表中多个值。原始查询(使用更新)将覆盖并仅显示最后一行的值。要解决这个问题,你可能想要有一个GROUP BYMINMAX,SUM或其他什么。