Re: Query performance problem - Mailing list pgsql-sql

From PFC
Subject Re: Query performance problem
Date
Msg-id opsnr4f2i6th1vuj@localhost
Whole thread Raw
In response to Query performance problem  (Phil Daintree <weberp@paradise.net.nz>)
List pgsql-sql
> Can anyone tell me why does the following code chokes ... literally -  
> this
> works almost invisbly under mysql - pg takes more than an hour even on a  
> very
> small 30 record database.
- You should really use 8.0- How much time toes it takes without the INSERT/UPDATES ?- Please post EXPLAIN ANALYZE of
allthe queries- You could do all that with only two queries
 


> (The table chartmaster is just a list of general ledger accounts  
> accountcode
> and accountdescription. PK = accountcode)
>
>
>     $ChartAccounts = DB_query('SELECT accountcode FROM chartmaster',$db);
>
>     While ($AccountRow = DB_fetch_array($ChartAccounts)){
>
>         for ($PeriodNo=$CreateFrom;$PeriodNo <= $CreateTo;$PeriodNo++) {
>
>             echo '<LI>' . _('Period Number') . ' ' . $PeriodNo . '</LI>';
>
>             // Check if there is an chart details record set up
>             $sql = 'SELECT count(*) FROM chartdetails
>                     WHERE accountcode='.$AccountRow['accountcode'].'
>                     AND period=' . $PeriodNo;
>             $InsChartDetails = DB_query($sql,$db,'','','',false);
>             $CountRows = DB_fetch_row($InsChartDetails);
>             $AccountExistsAlready = $CountRows[0];
>             DB_free_result($InsChartDetails);
>             if(! $AccountExistsAlready) {
>                 $sql = 'INSERT INTO chartdetails (accountcode,
>                             period)
>                     VALUES (' . $AccountRow['accountcode'] . ',
>                         ' . $PeriodNo . ')';
>                 $InsChartDetails = DB_query($sql,$db);
>                 DB_free_result($InsChartDetails);
>             }
>
>         }
>
>     /*Now run through each of the new chartdetail records created for each
> account and update them with the B/Fwd and B/Fwd budget no updates would  
> be
> required where there were previously no chart details set up ie
> FirstPeriodPostedTo > 0 */
>
>         for ($PeriodNo=$CreateFrom;$PeriodNo<=$CreateTo; $PeriodNo++) {
>
>             $sql = 'SELECT accountcode,
>                     period,
>                     actual + bfwd AS cfwd,
>                     budget + bfwdbudget AS cfwdbudget
>                 FROM chartdetails WHERE period =' . ($PeriodNo  - 1);
>             $ChartDetailsCFwd = DB_query($sql,$db);
>
>             while ($myrow = DB_fetch_array($ChartDetailsCFwd)){
>
>                 $sql = 'UPDATE chartdetails SET bfwd =' . $myrow['cfwd'] . ',
>                                 bfwdbudget =' . $myrow['cfwdbudget'] . '
>                         WHERE accountcode = ' . $myrow['accountcode'] . '
>                         AND period >=' . $PeriodNo;
>                 $UpdChartDetails = DB_query($sql,$db, '', '', '', false);
>                 DB_free_result($UpdChartDetails);
>             }
>             DB_free_result($ChartDetailsCFwd);
>         }
>
>     }
>
>
> function DB_query ($SQL,
>         &$Conn,
>         $ErrorMessage='',
>         $DebugMessage= '',
>         $Transaction=false,
>         $TrapErrors=true){
>
>     global $debug;
>
>     $result = pg_query($Conn, $SQL);
>     if ($DebugMessage == '') {
>         $DebugMessage = _('The SQL that failed was:');
>     }
>     //if (DB_error_no($Conn) != 0){
>     if ( !$result AND $TrapErrors){
>         prnMsg($ErrorMessage.'<BR>' . DB_error_msg($Conn),'error', _('DB  
> ERROR:'));
>         if ($debug==1){
>             echo '<BR>' . $DebugMessage. "<BR>$SQL<BR>";
>         }
>         if ($Transaction){
>             $SQL = 'rollback';
>             $Result = DB_query($SQL,$Conn);
>             if (DB_error_no($Conn) !=0){
>                 prnMsg('<br />'.  _('Error Rolling Back Transaction!!'), '', _('DB
> DEBUG:') );
>             }
>         }
>         if ($TrapErrors){
>             include('includes/footer.inc');
>             exit;
>         }
>     }
>     return $result;
>
> }
>
>
> I am hoping that someone will be able to see an alternative simpler  
> method or
> suggest a method of indexing the pg tables to optmise the required  
> queries. I
> would appreciate any help here men.
>
> Many thanks in advance ....
>
> --
> Phil Daintree
> webERP Project Admin
>
> -------------------------------------------------------
>




pgsql-sql by date:

Previous
From: "Chandan_Kumaraiah"
Date:
Subject: query
Next
From: Terry Fielder
Date:
Subject: Re: query