有什么方法可以改善这个商店程序的性能?

时间:2017-06-27 20:25:23

标签: stored-procedures sql-execution-plan query-performance

有什么方法可以改善这个商店程序的性能? 例如,在唯一语句(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

1 个答案:

答案 0 :(得分:0)

试试这个:

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 BYMINMAXSUM或其他任何内容。