improve performance of stored procedure

  • i have a procedure that i have to improve its performance.right now it does a lot of updates in the same table.what can i do to improve the performance? i attach a part of the procedure(the rest is written the same way).any help would be appreciated thanks in advance

    create proc cyp_applicant

    (

     @FE              char(03) = null,

     @fromdt          datetime,

     @todt            datetime

    )

    as

    BEGIN

     declare @err     int                                   

     declare @rc      int                                   

     declare @msg     varchar(70)                           

     declare @ret     int                                   

     declare @sta     int                                   

     declare @pbprm   varchar(255)                                             

     select @err = 0, @msg = null, @pbprm = null, @sta = 0

                                                                                  

    delete from cy_applicant

     begin tran lakis

      insert into cy_applicant (pe_001,pe_093)

      select h.id, h.to_g_status + h.to_d_status

        from pansys_stahis h

       where h.to_g_status in ('45','46','47','50')

         and h.sysdate between @fromdt and @todt

    group by h.id

      having h.ts = max(h.ts)

         and h.to_g_status in ('45','46','47','50') 

     

    update cy_applicant set

           pe_002 = substring(convert(char(8),a.hmeromhnia,112),7,2) +

                    substring(convert(char(8),a.hmeromhnia,112),5,2) +

                    substring(convert(char(8),a.hmeromhnia,112),1,4), 

           pe_003 = l.cust_id, 

           pe_004 = replicate('0',10-char_length(

                    rtrim(isnull(convert(char(10),abs(l.cust_score)),'0')))) +

                    rtrim(isnull(convert(char(10),abs(l.cust_score)),'0')),

           pe_005 = a.daneio_type,

           pe_006 = a.katasthma,  

           pe_007 = replicate('0',12-char_length(rtrim(ltrim(stuff(

                    convert(char(12),isnull(a.poso,0)),

                    charindex(".",

                    convert(char(12),isnull(a.poso,0))),1,null)))))+ stuff(

                    convert(char(12),isnull(a.poso,0)),

                    charindex(".",

                    convert(char(12),isnull(a.poso,0))),1,null), 

           pe_008 = replicate('0',3-char_length(

                    rtrim(isnull(convert(char(3),a.xronos),'0')))) +

                    rtrim(isnull(convert(char(3),a.xronos),'0')),

           pe_009 = a.product,

           pe_010 = replicate('0',9-char_length(rtrim(ltrim(stuff(

                    convert(char(9),isnull(a.spread,0)+isnull(a.bas_epitok,0)),

                    charindex(".",

                    convert(char(9),isnull(a.spread,0)+isnull(a.bas_epitok,0)))

                    ,1,null)))))+stuff(

                    convert(char(9),isnull(a.spread,0)+isnull(a.bas_epitok,0)),

                    charindex(".",

                    convert(char(9),isnull(a.spread,0)+isnull(a.bas_epitok,0)))

                    ,1,null),

           pe_011 = replicate('0',16-char_length(rtrim(ltrim(stuff(

                    convert(char(16),isnull(a.dosh,0)),

                    charindex(".",

                    convert(char(16),isnull(a.dosh,0)))

                    ,1,null)))))+stuff(

                    convert(char(16),isnull(a.dosh,0)),

                    charindex(".",

                    convert(char(16),isnull(a.dosh,0)))

                    ,1,null),

           pe_012 = a.promhueia,

           pe_013 = a.skopos,

           pe_014 = a.ayt_marka,

           pe_015 = a.ayt_palaiot,

           pe_016 = 'N',                                  

           pe_018 = substring(convert(char(8),p.hmer_egkata,112),7,2) +

                    substring(convert(char(8),p.hmer_egkata,112),5,2) +

                    substring(convert(char(8),p.hmer_egkata,112),1,4),

           pe_019 = substring(convert(char(8),p.hmer_gen,112),7,2) + 

                    substring(convert(char(8),p.hmer_gen,112),5,2) +

                    substring(convert(char(8),p.hmer_gen,112),1,4),

           pe_020 = p.steg_kat,

           pe_021 = p.oiko_kat,

           pe_022 = isnull(p.thl,'N'),

           pe_027 = p.ep_epaggelma,

           pe_028 = substring(convert(char(8),p.ep_hmer_enarepa,112),7,2) + 

                    substring(convert(char(8),p.ep_hmer_enarepa,112),5,2) +

                    substring(convert(char(8),p.ep_hmer_enarepa,112),1,4),

           pe_029 = isnull(p.ep_thl,'N'),

           pe_092 = replicate('0',12-char_length(rtrim(ltrim(stuff(

                    convert(char(12),isnull(a.dapanh,0)),

                    charindex(".",

                    convert(char(12),isnull(a.dapanh,0)))

                    ,1,null)))))+stuff(

                    convert(char(12),isnull(a.dapanh,0)),

                    charindex(".",

                    convert(char(12),isnull(a.dapanh,0)))

                    ,1,null), 

           pe_094 = ltrim(rtrim(a.dan_logar)),

           pe_096 = a.promhue,

           pe_097 = a.daneio_eidos,

           pe_098 = replicate('0',17-char_length(rtrim(ltrim(stuff(

                    convert(char(17),isnull(a.dosh_kef,0)), 

                    charindex(".",

                    convert(char(17),isnull(a.dosh_kef,0)))

                    ,1,null)))))+stuff(

                    convert(char(17),isnull(a.dosh_kef,0)),

                    charindex(".",

                    convert(char(17),isnull(a.dosh_kef,0)))

                    ,1,null), 

           pe_099 = replicate('0',4-char_length(

                    rtrim(isnull(convert(char(4),a.syxn_plhr_tok),'0')))) + 

                    rtrim(isnull(convert(char(4),a.syxn_plhr_tok),'0')),

           pe_100 = replicate('0',4-char_length(

                    rtrim(isnull(convert(char(4),a.syxn_plhr_kef),'0')))) + 

                    rtrim(isnull(convert(char(4),a.syxn_plhr_kef),'0')),

           pe_101 = replicate('0',4-char_length(

                    rtrim(isnull(convert(char(4),a.plhu_dos),'0')))) + 

                    rtrim(isnull(convert(char(4),a.plhu_dos),'0')),

           pe_103 = replicate('0',3-char_length(

                    rtrim(isnull(convert(char(3),p.ar_pistcard),'0')))) + 

                    rtrim(isnull(convert(char(3),p.ar_pistcard),'0')),

           pe_104 = p.dys_katdhl,

           pe_116 = isnull(convert(char(1),l.cust_evcchecked),'N'),

           pe_117 = isnull(convert(char(1),l.cust_evcisblack),'N'),

           pe_118 = substring(convert(char(8),l.cust_evcdate,112),7,2)+

                    substring(convert(char(8),l.cust_evcdate,112),5,2)+

                    substring(convert(char(8),l.cust_evcdate,112),1,4),

           pe_125 = a.katasthmacr

      from cy_applicant ap,

           cy_aithsh a,

           cy_pelaths p,

           cy_aitpel l

     where ap.pe_001 = a.aithsh_id

       and l.ait_id = a.aithsh_id

       and p.cust = l.cust_id 

       and l.cust_type = 'P'   

        

    commit tran lakis                                                                                

     

    update cy_applicant

       set pe_016 = 'Y'

      from cy_applicant p, cy_aithsh a

     where p.pe_001 = a.aithsh_id

       and a.ayt_parkyr = '1'

                                                                                                       

    update cy_applicant

       set pe_017 = k.tk

      from cy_applicant a, cy_pe_kaerg k

     where a.pe_003 = k.cust

     

    update cy_applicant

       set pe_023 = isnull(l.thl_khn,'N'),

           pe_025 = replicate('0',3-char_length(rtrim(isnull

                    (convert(char(10),l.tekna),'0')))) +

                     rtrim(isnull(convert(char(3),l.tekna),'0'))

      from cy_applicant a, cy_pe_lstpel l

     where a.pe_003 = l.cust

     

    update cy_applicant

       set pe_023 = 'N'

      from cy_applicant a, cy_pe_lstpel l

     where a.pe_003 = l.cust

       and pe_023 = ''

     commit tran lakis

    update cy_applicant

       set pe_023 = 'Y'

      from cy_applicant a, cy_pe_lstpel l

     where a.pe_003 = l.cust

       and pe_023 <> 'N'

     

    update cy_applicant

       set pe_022 = 'N'

      from cy_applicant a, cy_pe_lstpel l

     where a.pe_003 = l.cust

       and pe_022 = ''

     

    update cy_applicant

       set pe_022 = 'Y'

      from cy_applicant a, cy_pe_lstpel l

     where a.pe_003 = l.cust

       and pe_022 <> 'N' 

     

    update cy_applicant

       set pe_029 = 'N'

     where pe_029 = '' 

     

    update cy_applicant

       set pe_029 = 'Y'

     where pe_029 <> 'N'

     

    update cy_applicant

       set pe_031 = e.ej_perigr,

           pe_032 = replicate('0',12-char_length(rtrim(ltrim(stuff(

                    convert(char(12),isnull(e.ej_ajia,0)),

                    charindex(".",

                    convert(char(12),isnull(e.ej_ajia,0)))

                    ,1,null)))))+stuff(

                    convert(char(12),isnull(e.ej_ajia,0)),

                    charindex(".",

                    convert(char(12),isnull(e.ej_ajia,0)))

                    ,1,null)

      from cy_applicant p, cy_ejasfal e  

     where p.pe_001 = e.aithsh_id

       and e.inx = 1

    commit tran lakis

     

    update cy_applicant

       set pe_033 = e.ej_perigr,

           pe_034 = replicate('0',12-char_length(rtrim(ltrim(stuff(

                    convert(char(12),isnull(e.ej_ajia,0)),

                    charindex(".",

                    convert(char(12),isnull(e.ej_ajia,0)))

                    ,1,null)))))+stuff(

                    convert(char(12),isnull(e.ej_ajia,0)),

                    charindex(".",

                    convert(char(12),isnull(e.ej_ajia,0)))

                    ,1,null)

      from cy_applicant a, cy_ejasfal e

     where a.pe_001 = e.aithsh_id

       and e.inx = 2

     

    update cy_applicant

       set pe_035 = p.perigrafh

      from cy_applicant a, cy_pe_akinhta p

     where a.pe_003 = p.cust

       and p.inx = 1

     

    update cy_applicant 

       set pe_041 = p.perigrafh

      from cy_applicant a, cy_pe_akinhta p

     where a.pe_003 = p.cust

       and p.inx = 2

     

    update cy_applicant

       set pe_053 = 'Y'

      from cy_applicant a, cy_pe_logar b

     where a.pe_003 = b.cust

     

    update cy_applicant

       set pe_053 = 'N'

     where pe_053 <> 'Y'

        or pe_053 is null

     

    update cy_applicant 

       set pe_054 = d.daneisths,

           pe_055 = replicate('0',12-char_length(rtrim(ltrim(stuff(

                    convert(char(12),isnull(d.ypoloipo,0)),

                    charindex(".",

                    convert(char(12),isnull(d.ypoloipo,0)))

                    ,1,null)))))+stuff(

                    convert(char(12),isnull(d.ypoloipo,0)),

                    charindex(".",

                    convert(char(12),isnull(d.ypoloipo,0)))

                    ,1,null), 

           pe_056 = substring(convert(char(8),d.lhjh,112),7,2) +

                    substring(convert(char(8),d.lhjh,112),5,2) +

                    substring(convert(char(8),d.lhjh,112),1,4),

           pe_057 = d.skopos 

      from cy_applicant a, cy_pe_alla_daneia d 

     where a.pe_003 = d.cust

       and d.inx = 1

    ...

    update cy_applicant

       set pe_001 = isnull(pe_001,' '),

           pe_002 = isnull(pe_002,' '),

           pe_003 = isnull(pe_003,' '),

           pe_004 = isnull(pe_004,replicate('0',10)),

           pe_005 = isnull(pe_005,' '),

           pe_006 = isnull(pe_006,' '),

           pe_007 = isnull(pe_007,replicate('0',12)),

           pe_008 = isnull(pe_008,replicate('0',3)),

           pe_009 = isnull(pe_009,replicate('0',3)),

           pe_010 = isnull(pe_010,replicate('0',9)),

           pe_011 = isnull(pe_011,replicate('0',16)),

           pe_012 = isnull(pe_012,' '),

           pe_013 = isnull(pe_013,' '),

           pe_014 = isnull(pe_014,' '),

           pe_015 = isnull(pe_015,' '),

           pe_016 = isnull(pe_016,' '),

           pe_017 = isnull(pe_017,' '),

           pe_018 = isnull(pe_018,' '),

           pe_019 = isnull(pe_019,' '),

           pe_020 = isnull(pe_020,' '),

           pe_021 = isnull(pe_021,' '),

           pe_022 = isnull(pe_022,' '),

           pe_023 = isnull(pe_023,' '),

           pe_024 = isnull(pe_024,' '),

           pe_025 = isnull(pe_025,replicate('0',3)),

           pe_026 = isnull(pe_026,' '),

           pe_027 = isnull(pe_027,' '),

           pe_028 = isnull(pe_028,' '),

           pe_029 = isnull(pe_029,' '),

           pe_030 = isnull(pe_030,replicate('0',18)),

           pe_031 = isnull(pe_031,' '),

           pe_032 = isnull(pe_032,replicate('0',12)),

           pe_033 = isnull(pe_033,' '),

           pe_034 = isnull(pe_034,replicate('0',12)),

           pe_035 = isnull(pe_035,' '),

           pe_036 = isnull(pe_036,' '),

           pe_037 = isnull(pe_037,' '),

           pe_038 = isnull(pe_038,' '),

           pe_039 = isnull(pe_039,' '),

           pe_040 = isnull(pe_040,' '),

           pe_041 = isnull(pe_041,' '),

           pe_042 = isnull(pe_042,' '),

           pe_043 = isnull(pe_043,' '),

           pe_044 = isnull(pe_044,' '),

           pe_045 = isnull(pe_045,' '),

           pe_046 = isnull(pe_046,' '),

           pe_047 = isnull(pe_047,' '),

           pe_048 = isnull(pe_048,' '),

           pe_049 = isnull(pe_049,' '),

           pe_050 = isnull(pe_050,' '),

           pe_051 = isnull(pe_051,' '),

           pe_052 = isnull(pe_052,' '),

           pe_053 = isnull(pe_053,' '),

           pe_054 = isnull(pe_054,' '),

           pe_055 = isnull(pe_055,replicate('0',12)),

           pe_056 = isnull(pe_056,' '),

           pe_057 = isnull(pe_057,' '),

           pe_058 = isnull(pe_058,' '),

           pe_059 = isnull(pe_059,replicate('0',12)),

           pe_060 = isnull(pe_060,' '),

           pe_061 = isnull(pe_061,' '),

           pe_062 = isnull(pe_062,' '),

           pe_063 = isnull(pe_063,' '),

           pe_064 = isnull(pe_064,' '),

           pe_065 = isnull(pe_065,' '),

           pe_066 = isnull(pe_066,replicate('0',12)),

           pe_067 = isnull(pe_067,replicate('0',12)),

           pe_069 = isnull(pe_069,' '),

           pe_070 = isnull(pe_070,' '),

           pe_071 = isnull(pe_071,replicate('0',4)),

           pe_072 = isnull(pe_072,replicate('0',12)),

           pe_073 = isnull(pe_073,' '),

           pe_074 = isnull(pe_074,' '),

           pe_075 = isnull(pe_075,replicate('0',4)),

           pe_076 = isnull(pe_076,replicate('0',12)),

           pe_077 = isnull(pe_077,' '),

           pe_078 = isnull(pe_078,' '),

           pe_079 = isnull(pe_079,' '),

           pe_080 = isnull(pe_080,' '),

           pe_081 = isnull(pe_081,' '),

           pe_082 = isnull(pe_082,' '),

           pe_083 = isnull(pe_083,' '),

           pe_084 = isnull(pe_084,' '),

           pe_085 = isnull(pe_085,' '),

           pe_086 = isnull(pe_086,' '),

           pe_087 = isnull(pe_087,' '),

           pe_088 = isnull(pe_088,replicate('0',18)),

           pe_089 = isnull(pe_089,' '),

           pe_090 = isnull(pe_090,' '),

           pe_091 = isnull(pe_091,' '),

           pe_092 = isnull(pe_092,replicate('0',12)),

           pe_093 = isnull(pe_093,' '),

           pe_094 = isnull(pe_094,' '),

           pe_095 = isnull(pe_095,' '),

           pe_096 = isnull(pe_096,' '),

           pe_097 = isnull(pe_097,' '),

           pe_098 = isnull(pe_098,replicate('0',17)),

           pe_099 = isnull(pe_099,replicate('0',4)),

           pe_100 = isnull(pe_100,replicate('0',4)),

           pe_101 = isnull(pe_101,replicate('0',4)),

           pe_102 = isnull(pe_102,' '),

           pe_103 = isnull(pe_103,replicate('0',3)),

           pe_104 = isnull(pe_104,' '),

           pe_105 = isnull(pe_105,' '),

           pe_106 = isnull(pe_106,' '),

           pe_107 = isnull(pe_107,replicate('0',4)),

           pe_108 = isnull(pe_108,replicate('0',5)),

           pe_109 = isnull(pe_109,' '),

           pe_110 = isnull(pe_110,' '),

           pe_111 = isnull(pe_111,replicate('0',4)),

           pe_112 = isnull(pe_112,replicate('0',5)),

           pe_113 = isnull(pe_113,' '),

           pe_114 = isnull(pe_114,' '),

           pe_115 = isnull(pe_115,' '),

           pe_116 = isnull(pe_116,' '),

           pe_117 = isnull(pe_117,' '),

           pe_118 = isnull(pe_118,' '),

           pe_119 = isnull(pe_119,' '),

           pe_120 = isnull(pe_120,' '),

           pe_121 = isnull(pe_121,' '),

           pe_122 = isnull(pe_122,' '),

           pe_123 = isnull(pe_123,' '),

           pe_124 = isnull(pe_124,' '),

           pe_125 = isnull(pe_125,' '),

           pe_126 = isnull(pe_126,replicate('0',10)), 

           pe_127 = isnull(pe_127,' '),

           pe_128 = isnull(pe_128,' '),

           pe_129 = isnull(pe_129,' '),

           pe_130 = isnull(pe_130,' '),

           pe_131 = isnull(pe_131,replicate('0',3)),

           pe_132 = isnull(pe_132,' '),

           pe_133 = isnull(pe_133,' '),

           pe_134 = isnull(pe_134,' '),

           pe_135 = isnull(pe_135,' '),

           pe_136 = isnull(pe_136,replicate('0',12)),

           pe_137 = isnull(pe_137,' '),

           pe_138 = isnull(pe_138,' '),

           pe_139 = isnull(pe_139,' '),

           pe_140 = isnull(pe_140,replicate('0',12)),

           pe_141 = isnull(pe_141,' '),

           pe_142 = isnull(pe_142,' '),

           pe_143 = isnull(pe_143,replicate('0',10)),  

           pe_144 = isnull(pe_144,' '),

           pe_145 = isnull(pe_145,' '), 

           pe_146 = isnull(pe_146,replicate('0',4)),  

           pe_147 = isnull(pe_147,replicate('0',12)), 

           pe_148 = isnull(pe_148,' '),  

           pe_149 = isnull(pe_149,' '),  

           pe_150 = isnull(pe_150,replicate('0',4)), 

           pe_151 = isnull(pe_151,replicate('0',5)),

           pe_152 = isnull(pe_152,' '),

           pe_153 = isnull(pe_153,replicate('0',4)),  

           pe_154 = isnull(pe_154,replicate('0',12)),  

           pe_155 = isnull(pe_155,' '),

           pe_156 = isnull(pe_156,' '), 

           pe_157 = isnull(pe_157,replicate('0',4)),    

           pe_158 = isnull(pe_158,replicate('0',5)),

           pe_159 = isnull(pe_159,' '), 

           pe_160 = isnull(pe_160,' '),

           pe_161 = isnull(pe_161,' '),

           pe_162 = isnull(pe_162,' '),

           pe_163 = isnull(pe_163,' '), 

           pe_164 = isnull(pe_164,' '),

           pe_165 = isnull(pe_165,replicate('0',3)),   

           pe_166 = isnull(pe_166,' '), 

           pe_167 = isnull(pe_167,' '), 

           pe_168 = isnull(pe_168,' '), 

           pe_169 = isnull(pe_169,' '),   

           pe_170 = isnull(pe_170,' '), 

           pe_171 = isnull(pe_171,' '), 

           pe_172 = isnull(pe_172,' '),   

           pe_173 = isnull(pe_173,' '), 

                                              

           pe_175 = isnull(pe_175,replicate('0',10)),

           pe_176 = isnull(pe_176,replicate('0',10)),  

           pe_177 = isnull(pe_177,' '),

           pe_178 = isnull(pe_178,' '),

           pe_179 = isnull(pe_179,replicate('0',3)),

           pe_180 = isnull(pe_180,replicate('0',12)),

           pe_181 = isnull(pe_181,replicate('0',12)),

           pe_182 = isnull(pe_182,replicate('0',12)),

           pe_183 = isnull(pe_183,replicate('0',3)),

           pe_184 = isnull(pe_184,replicate('0',3)), 

           pe_185 = isnull(pe_185,replicate('0',12)),

           pe_186 = isnull(pe_186,replicate('0',12)),

           pe_187 = isnull(pe_187,replicate('0',12)),

           pe_188 = isnull(pe_188,replicate('0',3)),   

           pe_189 = isnull(pe_189,replicate('0',3)), 

           pe_190 = isnull(pe_190,replicate('0',12)),

           pe_191 = isnull(pe_191,replicate('0',12)),

           pe_192 = isnull(pe_192,replicate('0',12)),

           pe_193 = isnull(pe_193,replicate('0',3)), 

           pe_194 = isnull(pe_194,replicate('0',3)), 

           pe_195 = isnull(pe_195,replicate('0',12)),

           pe_196 = isnull(pe_196,replicate('0',12)),

           pe_197 = isnull(pe_197,replicate('0',12)),

           pe_198 = isnull(pe_198,replicate('0',3)), 

           pe_199 = char(13) + char(10)

     

  • 1 - May I suggest that you normalize the design... it's not normal to see field1, field2 in a table definition.

    2 - If you are only updating 1 table, I suggest you find a way to select only the data that needs to be modified, do whatever you need to that data (either with subqueries or a table variable), then using that data Update the table only once.

    3 - Normalize the data.

    4 - Normalize the data.

  • One other thing. It seems you are setting values in a table to "N", then the remaining values to "Y". You could do this in one statement with a CASE or I'd do the "y"s first and then the "N"s over top. Depending on your selectivity, it might be faster. The 'N" statements cause table scans.

  • thanks for the responses

    i was thinking if there is a better approach to the whole thing,like creating a #table,inserting the values in that and do a final update in the end;

    is there another approach or sth?

  • Depending on the size of the tables and/or the number of rows being updated you might get better performance with Table Variables (Declare Tablea TABLE (idkey int, fname varchar(100)...)). Select the records to be updated into the Table Variable, if possible select the update date into one or more other Table Variables and get rid of the redundant string calculations, then apply the changes from one Table Variable to the other. Not seeing your entire SP and not really having time to sit and analyze the whole thing that's my gut reaction.

    If you're questioning whether or not to use temp tables, I'd consider Table Variables first. They're in memory so they're much faster. I've rewritten several queries I inherited with multiple complex Select/Update actions as simpler steps using Table Variables and seen 10-fold performance improvements.

    That having been said, Normalize your Data. If you're not sure how there are several good tools on the market that will give you recommendations. You can find them by doing some appropriate Google searches.

     

     

Viewing 5 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic. Login to reply