Hello,

we are having some performance problems with some kind of queries. This is a simplified example of what is happening in our production environment.

We have an application with jboss and maxdb 7.5.00.23 (but same I've tested 7.5.00.31, and the behaviour is the same)

I've created a database with default parameters. Let's say we have a table, with a field (HEADER_LINE_ID) is a foreign key of the same table, and indexed.

CREATE TABLE LINE
(
ID               Fixed (19,0)    NOT NULL,
TYPE               Integer,
CODE               Char (20) ASCII,
HEADER_LINE_ID               Fixed (19,0),
CREATION_DATE               Date,
PRIMARY KEY (ID)
)

ALTER TABLE LINE ADD CONSTRAINT FK_HEADER_LINE FOREIGN KEY (HEADER_LINE_ID) REFERENCES LINE (ID)
)
//
CREATE INDEX IDX_LINE_HEADER_LINE ON LINE (HEADER_LINE_ID)
//

I've done this test inserting 100.000 registers.
Under some circumstances (when jboss knows IDs for registers it wants to load), it creates a query like this

SELECT ID, TYPE, CODE, HEADER_LINE_ID, CREATION_DATE
FROM LINE
WHERE (ID=2294752131926180503)
OR (ID=2294763105441405458)
.
. (n times)
.
OR (ID=2302419071075259925)

When the query has 50 or terms or less, the explain we get is like this:

LINE DIFFERENT STRATEGIES FOR OR-TERMS       1010
EQUAL CONDITION FOR KEY
ID      (USED KEY COLUMN)
EQUAL CONDITION FOR KEY
.
.  ( n times)
.
ID      (USED KEY COLUMN)
EQUAL CONDITION FOR KEY
ID      (USED KEY COLUMN)
     RESULT IS COPIED   , COSTVALUE IS         50


but, for 51 or terms of more, we get a table scan:

LINE    TABLE SCAN                                    1010
     RESULT IS NOT COPIED , COSTVALUE IS        1010


this seems strange, because for 50 or terms, cost is 50, and for 1 term more, cost goes to 1010 (in production, cost changes from 50 to 18340).

Moreover, for field HEADER_LINE_ID, something similar happens.

For example, we get a query like this:

SELECT ID, TYPE, CODE, HEADER_LINE_ID, CREATION_DATE
FROM LINE
WHERE (HEADER_LINE_ID=2294752131926180503)
OR (HEADER_LINE_ID=2294763105441405458)
.
. (n times)
.

OR (HEADER_LINE_ID=2294478368382782110)

For 40 or terms or less, query is made with strategy "DIFFERENT STRATEGIES FOR OR-TERMS" using index defined over HEADER_LINE_ID

LINE DIFFERENT STRATEGIES FOR OR-TERMS        298
IDX_LINE_HEADER_LINE EQUAL CONDITION FOR INDEX
.
. (n times)
.
IDX_LINE_HEADER_LINE EQUAL CONDITION FOR INDEX
      RESULT IS COPIED   , COSTVALUE IS        160


But for 41 terms, we get also a table scan

LINE    TABLE SCAN                                    1010
        RESULT IS NOT COPIED , COSTVALUE IS        1010


So, for more than 50 terms if table is accesed by primary key, or for more than 40 terms if table is accesed by and indexed column, strategy "DIFFERENT STRATEGIES FOR OR-TERMS" seems to be discarted. So, I'm changing configuration of jboss to get queries with a limited number of or terms, but I'd like to know if quantity of or-terms to discard or-terms strategy is fixed, or is related to some database parameters, or maybe depends of size of table accesed.


Best regards,

Jose Dillet

_________________________________________________________________
Dale rienda suelta a tu tiempo libre. Encuentra mil ideas para exprimir tu ocio con MSN Entretenimiento. http://entretenimiento.msn.es/


--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to