Icon View Incident Report

Minor Minor
Reported By: Uli Becker
Reported On: 3/25/2008
For: Version 1.08 Build 1
# 2569 Sub-Queries with Parameters Are Slower Than Sub-Queries without Parameters

The execution time of this procedure is about 4 sec! though only one row is updated (Indexes on Mahnstufe and RechnungenID in Mahnungen are set properly). When I replace the paramaters by a hardcoded ID, it runs twice as fast.

BEGIN
 DECLARE Mahngebuehr2 Float Default 0;
 DECLARE Mahngebuehr3 Float Default 0;
 DECLARE Condition VarChar;
 DECLARE Result CURSOR FOR Stmt;

 Prepare Stmt FROM
   'select Mahngebuehr2, Mahngebuehr3 from optionen';
 Open Result;
 Fetch First FROM Result(Mahngebuehr2, Mahngebuehr3) INTO Mahngebuehr2, Mahngebuehr3;
 Close Result;
 Prepare Stmt from
 'Update Rechnungen set Mahnung1 = Current_Date
 where RechnungenID in (select RechnungenID from Mahnungen 
 where RechnungenID = ? and Mahnstufe = 1)';
 Execute Stmt using RechnungenID;
 Prepare Stmt from
 'Update Rechnungen set Mahnung2 = Current_Date,
 Mahngebuehr2 = ' + Cast(Mahngebuehr2 as VarChar) + '
 where RechnungenID in (select RechnungenID from Mahnungen where RechnungenID = ? and
Mahnstufe = 2)';
 Execute Stmt using RechnungenID;
 Prepare Stmt from
 'Update Rechnungen set Mahnung3 = Current_Date,
 Mahngebuehr3 = ' + Cast(Mahngebuehr3 as VarChar) + '
 where RechnungenID in (select RechnungenID from Mahnungen where RechnungenID = ? and
Mahnstufe = 3)';
 Execute Stmt using RechnungenID;
 Prepare Stmt from
 'Update Rechnungen set Inkasso = Current_Date
 where RechnungenID in (select RechnungenID from Mahnungen where RechnungenID = ? and
Mahnstufe = 4)';
 Execute Stmt using RechnungenID;

 /* Mahnungen für Protokoll bearbeiten */
 Execute Immediate 'Update Mahnungen set Mahnung1 = Current_Date where
 Mahnstufe = 1';
 Execute Immediate 'Update Mahnungen set Mahnung2 = Current_Date where
 Mahnstufe = 2';
 Execute Immediate 'Update Mahnungen set Mahnung3 = Current_Date where
 Mahnstufe = 3';
 Execute Immediate 'Update Mahnungen set Inkasso = Current_Date where
 Mahnstufe = 4';
END



Comments Comments
The issue was with the parameters in the sub-query causing the sub-query to be executed more times than necessary.


Resolution Resolution
Fixed Problem on 3/26/2008 in version 1.09 build 1


Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial

Image