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]

Reply via email to