Optimizer's issue

Vlad Arkhipov <[email protected]> Wed, 30 May 2007 14:02:37 +0900
Newsgroups gmane.comp.db.maxdb
Message-ID <[email protected]>
GIS.PATS is a table with about 400.000 records.
CREATE TABLE GIS.PATS (
  CARTNUM INTEGER PRIMARY KEY,
  FAM VARCHAR(50),
  NAME VARCHAR(50),
  NNAME VARCHAR(50),
  BIRTHDAY DATE,
  HIDDEN BOOLEAN,
  UNIQUE(FAM, NAME, NNAME, BIRTHDATE)
)

This query works great (10-20 ms):
EXPLAIN
SELECT p.FAM
FROM GIS.PATS p
WHERE p.FAM LIKE 'A%' AND HIDDEN IS NULL
 OWNER     TABLENAME       COLUMN_OR_INDEX     
STRATEGY                                PAGECOUNT    
 --------  --------------  ------------------  
--------------------------------------  ------------
           P               PAT_UNIQ            RANGE CONDITION FOR 
INDEX                     7772   
                           FAM                      (USED INDEX 
COLUMN)                             
           JDBC_CURSOR_60                         RESULT IS NOT COPIED , 
COSTVALUE IS           2

This is also not bad (<1s):
EXPLAIN
SELECT p.FAM
FROM GIS.PATS p
WHERE p.FAM LIKE RTRIM('A') || '%'

 OWNER     TABLENAME       COLUMN_OR_INDEX     
STRATEGY                                PAGECOUNT   
 --------  --------------  ------------------  
--------------------------------------  ------------
           P               PAT_UNIQ            INDEX 
SCAN                                    7772  
                                               ONLY INDEX 
ACCESSED                                 
           JDBC_CURSOR_12                         RESULT IS NOT COPIED , 
COSTVALUE IS        7772  

Adding more conditions confuses the optimizer (80-90s)...
EXPLAIN
SELECT p.FAM
FROM GIS.PATS p
WHERE p.FAM LIKE RTRIM('A') || '%' AND p.HIDDEN IS NULL
 OWNER     TABLENAME       COLUMN_OR_INDEX     
STRATEGY                                PAGECOUNT   
 --------  --------------  ------------------  
--------------------------------------  ------------
           P                                   TABLE 
SCAN                                   16971  
           JDBC_CURSOR_14                         RESULT IS NOT COPIED , 
COSTVALUE IS       16971



I use it in dbproc:
SELECT ...
FROM ...
WHERE p.FAM LIKE RTRIM(:param_1) || '%' ... AND p.HIDDEN IS NULL

Now it's solved by this trick:
SET PARAM_1 = RTRIM(PARAM_1) || '%';
SELECT ...
FROM ...
WHERE p.FAM LIKE :param_1 ...


Is it an optimizer's issue?
MaxDB 7.6.00.16 - 016-123-109-428

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