> CREATE TABLE STK_STOCKTRANSACTION (
>      ID                       INTEGER DEFAULT 0 NOT NULL,
>      TRANSACTIONTYPE          VARCHAR(6),
>      STOCKCODE                VARCHAR(25),
>      SALESORDERNO             VARCHAR(15),
>      UOM                      VARCHAR(3),
>      REFNO                    VARCHAR(15),
>      BINLOCATION              VARCHAR(8),
>      ISACTVE                  VARCHAR(1),
>      ACCOUNTCODE              VARCHAR(8),
>      TRANSACTIONDESC          VARCHAR(60),
>      TRANDTETME               TIMESTAMP,
>      PERIOD                   INTEGER,
>      FINANCIALYEAR            INTEGER,
>      SYSDTETME                TIMESTAMP,
>      USRNME                   VARCHAR(8),
>      WAREHOUSECODE            VARCHAR(4),
>      VALUATIONCOST            DECIMAL(18,5),
>      SELLINGPRICE             DECIMAL(18,5),
>      SELLINGPRICEPER          DECIMAL(18,5),
>      VALUATIONCOSTPER         DECIMAL(18,5),
>      OLDCOSTPRICEPER          DECIMAL(18,5),
>      QTY1                     DECIMAL(18,5),
>      QTY2                     DECIMAL(18,5),
>      COSTPRICE                DECIMAL(18,5),
>      OLDCOSTPRICE             DECIMAL(18,5),
>      COSTPER                  DECIMAL(18,5),
>      SOURCEID                 INTEGER,
>      SOURCETYPE               VARCHAR(15),

You told us, that SOURCETYPE is not a [VAR]CHAR but a numeric type. Ts, 
ts, ts ...

>      YEARENDADJ               VARCHAR(1),
>      PROCESSCURRENCY          VARCHAR(3),
>      PROCESSPRICE             DECIMAL(18,5),
>      PROCESSPER               DECIMAL(18,5),
>      PROCESSDISCOUNT          DECIMAL(18,5),
>      PROCESSEXCHANGERATE      FLOAT,
>      PROCESSEXCHANGERATETYPE  VARCHAR(15),
>      POSID                    INTEGER,
>      SOURCELEDGER             VARCHAR(15),
>      SOURCEDETAILID           INTEGER,
>      TRACKINGNO1              VARCHAR(30),
>      TRACKINGNO2              VARCHAR(30),
>      TRACKINGNO3              VARCHAR(30),
>      TRACKINGNO4              VARCHAR(30)
> );
>
>
>
>
> /******************************************************************************/
> /****                             Primary Keys                             
> ****/
> /******************************************************************************/
>
> ALTER TABLE STK_STOCKTRANSACTION ADD PRIMARY KEY (ID);
>
>
> /******************************************************************************/
> /****                               Indices                                
> ****/
> /******************************************************************************/
>
> CREATE INDEX STK_STOCKTRANSACTION_IDX1 ON STK_STOCKTRANSACTION 
> (FINANCIALYEAR, PERIOD);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX10 ON STK_STOCKTRANSACTION 
> (STOCKCODE, TRANSACTIONTYPE, TRANDTETME, ID);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX11 ON STK_STOCKTRANSACTION 
> (TRANDTETME, STOCKCODE, WAREHOUSECODE, TRANSACTIONTYPE);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX12 ON STK_STOCKTRANSACTION 
> (ID);
> CREATE INDEX STK_STOCKTRANSACTION_IDX13 ON STK_STOCKTRANSACTION (TRANDTETME, 
> ID);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX14 ON STK_STOCKTRANSACTION 
> (STOCKCODE, WAREHOUSECODE, TRANDTETME, ID);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX15 ON STK_STOCKTRANSACTION 
> (STOCKCODE, TRACKINGNO1, TRACKINGNO2, TRACKINGNO3, TRACKINGNO4, TRANDTETME, 
> ID);
> CREATE INDEX STK_STOCKTRANSACTION_IDX16 ON STK_STOCKTRANSACTION 
> (SOURCELEDGER, TRANSACTIONTYPE, REFNO, SOURCEDETAILID);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX2 ON STK_STOCKTRANSACTION 
> (STOCKCODE, TRANSACTIONTYPE, WAREHOUSECODE, TRANDTETME, ID);
> CREATE INDEX STK_STOCKTRANSACTION_IDX3 ON STK_STOCKTRANSACTION 
> (FINANCIALYEAR, PERIOD, STOCKCODE, WAREHOUSECODE, TRANSACTIONTYPE);
> CREATE INDEX STK_STOCKTRANSACTION_IDX4 ON STK_STOCKTRANSACTION (STOCKCODE, 
> WAREHOUSECODE, TRANSACTIONTYPE);
> CREATE INDEX STK_STOCKTRANSACTION_IDX5 ON STK_STOCKTRANSACTION (STOCKCODE, 
> WAREHOUSECODE, FINANCIALYEAR, PERIOD, TRANSACTIONTYPE);
> CREATE INDEX STK_STOCKTRANSACTION_IDX6 ON STK_STOCKTRANSACTION 
> (FINANCIALYEAR);
> CREATE DESCENDING INDEX STK_STOCKTRANSACTION_IDX7 ON STK_STOCKTRANSACTION 
> (STOCKCODE, TRANDTETME, ID);
> CREATE INDEX STK_STOCKTRANSACTION_IDX8 ON STK_STOCKTRANSACTION 
> (WAREHOUSECODE, STOCKCODE);
> CREATE INDEX STK_STOCKTRANSACTION_IDX9 ON STK_STOCKTRANSACTION (SOURCETYPE, 
> TRANSACTIONTYPE, REFNO);

Hmm, could be a bit over-indexed?

I don't know your access patterns, but you know that each index makes 
delete/insert/update performance worse, especially when an index need to 
be updated by non-sequential values in e.g. batch processes, changing a 
bunch of records.

I have run through some tests on indexes delete/insert/update wise. 
Although I'm not ready to publish the results, I can only say, each 
additional (useless) index can decrease DML performance dramatically. 
The page cache plays an important role here as well.

-- 
With regards,
Thomas Steinmaurer
http://www.upscene.com/

Reply via email to