Mailing List
Home
Forum Home
MySQL General - General MySQL discussion
MySQL++ - Programming with the C++ API to MySQL
MaxDB - Everything about MaxDB, formerly known as SAP DB
ODBC - ODBC with the MySQL Connector/ODBC driver
MySQL on Win32 - Runing MySQL on Windows 9x/Me/NT/2000/XP
Java Help - Mostly related to the MySQL Connector/J driver
Perl - Perl support for MySQL with DBI and DBD::mysql
GUI - MySQL GUI Tools
Announcement
Subjects
mysql openssl Question
ERROR 1045: Access denied for user: 'root@localhost ' (Using
password: NO)
Update one field with more fields from another table
Getting Identity after INSERT
ERROR 2002: Can 't connect to local MySQL server through socket
mysql test 4 1 fails with the gis test
MySQL Cluster Software
Downgrade Mysql from 4 to 3 23
Mysql 4 0 Oracle Stored Procedure Trigger Conversion
Can 't access mysql after kernel upgrade
Executing MySQL Commands From Within C Program
Comparing and writing out BLOBS
Preventing Duplicate Entries
FULLTEXT query format question
Strange behavior, Table Level Permission
Does the binary log enabling affect the MySQL performances?
mysql:it 's a db not a dbms how it 's possible?!
mysql have same function mthod as Oracle decode()
 
Optimizer 's issue

Optimizer 's issue

2007-05-30       - By Vlad Arkhipov

 Back
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/maxdb?unsub=mysql@(protected)