Hello,

 

 

            I recently ugraded to 4-14-Max from 4.13-Max to take advantage
of the optimizer fulltext bug fix.  However a certain query using the
fulltext indexies is MUCH SLOWER then using no idex.  Here is the query

 

 

 

select distinct p.USER_CREATED, p.ID, p.DATE_CREATED, p.LAST_CLICK, p.ZIP
from PERSON p 

 join INTEREST i on p.ID=i.PERSON_ID  

join INTEREST i0 on p.ID=i0.PERSON_ID  

join INTEREST_TYPE it0 on i0.INTEREST_ID=it0.ID 

where p.FIRST_NAME!='Unsubscribed' and match(i.COMMENT) against('+games ' in
boolean mode)  and (it0.NAME='occupation' and match(i0.COMMENT)
against('+software ' in boolean mode));

 

 

the explain on 4.0.13-Max

 

+-------+--------+----------------------------------------------------------
---+-----------+---------+-------------+--------+---------------------------
---+

| table | type   | possible_keys
| key       | key_len | ref         | rows   | Extra
|

+-------+--------+----------------------------------------------------------
---+-----------+---------+-------------+--------+---------------------------
---+

| it0   | ALL    | PRIMARY
| NULL      |    NULL | NULL        |     30 | Using where; Using temporary
|

| i     | ALL    |
PERSON_ID,interest_person_id_idx,interest_person_id_two_idx | NULL      |
NULL | NULL        | 550709 | Using where                  |

| p     | eq_ref | PRIMARY,person_id_base_idx
| PRIMARY   |      40 | i.PERSON_ID |      1 | Using where
|

| i0    | eq_ref |
PERSON_ID,interest_person_id_idx,interest_person_id_two_idx | PERSON_ID |
80 | p.ID,it0.ID |      1 | Using where; Distinct        |

 

Query time: 15 seconds

Notice that it does not use the fulltext index (COMMENT) in the interest
tables I,i0

 

The explain on 4-14-Max

 

+-------+----------+--------------------------------------------------------
-------------+---------+---------+----------------+------+------------------
------------+

| table | type     | possible_keys
| key     | key_len | ref            | rows | Extra                        |

+-------+----------+--------------------------------------------------------
-------------+---------+---------+----------------+------+------------------
------------+

| i     | fulltext |
PERSON_ID,interest_person_id_idx,interest_person_id_two_idx,COMMENT |
COMMENT |       0 |                |    1 | Using where; Using temporary |

| p     | eq_ref   | PRIMARY,person_id_base_idx
| PRIMARY |      40 | i.PERSON_ID    |    1 | Using where                  |

| i0    | fulltext |
PERSON_ID,interest_person_id_idx,interest_person_id_two_idx,COMMENT |
COMMENT |       0 |                |    1 | Using where; Distinct        |

| it0   | eq_ref   | PRIMARY
| PRIMARY |      40 | i0.INTEREST_ID |    1 | Using where; Distinct        |

 

Query time : 146 seconds, ( slow querylog lists rows examined as 3.6 million
)

Notice the different join order and use of the fulltext indexies

 

With a single join of the INTEREST table the index is used correctly and the
query is quick.  If anyone has any idea why USING a fulltext index is slower
please share your knowledge.  Below is the show create table output.

 

Thanks,

 

Trevor

 

| INTEREST | CREATE TABLE `INTEREST` (

  `ID` varchar(40) NOT NULL default '',

  `PERSON_ID` varchar(40) NOT NULL default '',

  `COMMENT` mediumtext,

  `DATE_CREATED` timestamp(14) NOT NULL,

  `INTEREST_ID` varchar(40) NOT NULL default '',

  PRIMARY KEY  (`ID`),

  UNIQUE KEY `PERSON_ID` (`PERSON_ID`,`INTEREST_ID`),

  KEY `interest_person_id_idx` (`PERSON_ID`),

  KEY `interest_person_id_two_idx` (`PERSON_ID`,`COMMENT`(200)),

  FULLTEXT KEY `COMMENT` (`COMMENT`)

) TYPE=MyISAM |

 

| INTEREST_TYPE | CREATE TABLE `INTEREST_TYPE` (

  `ID` varchar(40) NOT NULL default '',

  `NAME` varchar(100) default NULL,

  `NICE_NAME` varchar(100) default NULL,

  `TYPE` varchar(20) NOT NULL default '',

  `DESCRIPTION` mediumtext,

  `DATE_CREATED` timestamp(14) NOT NULL,

  PRIMARY KEY  (`ID`)

) TYPE=MyISAM |

 

| PERSON |CREATE TABLE `PERSON` (

  `ID` char(40) NOT NULL default '',

  `PHOTO_ID` char(40) default NULL,

  `EMAIL` char(100) NOT NULL default '',

  `LAST_CLICK` timestamp(14) NOT NULL,

  `FIRST_NAME` char(40) default NULL,

  `LAST_NAME` char(40) default NULL,

  `ZIP` char(15) NOT NULL default '',

  `COUNTRY` char(40) default NULL,

  `BIRTHDAY` datetime default NULL,

  `GENDER` char(1) default NULL,

  `STATUS` char(1) default NULL,

  `SEND_EMAIL` tinyint(1) default NULL,

  `IS_DELETED` char(1) NOT NULL default '',

  `USER_CREATED` int(11) NOT NULL default '0',

  `DATE_CREATED` timestamp(14) NOT NULL,

  `USER_MODIFIED` int(11) default NULL,

  `DATE_MODIFIED` timestamp(14) NOT NULL,

  `HIDE_AGE` tinyint(1) default NULL,

  `HIDE_GENDER` tinyint(1) default NULL,

  `HIDE_LOCATION` tinyint(1) default NULL,

  `HIDE_ONLINE` tinyint(1) default NULL,

  `GENERATION` int(11) default '0',

  `ALLOW_EMAIL_DEGREE` int(11) default '0',

  `HAS_FILTER` tinyint(1) default '0',

  `NEWSLETTER` tinyint(3) unsigned default NULL,

  PRIMARY KEY  (`ID`),

  KEY `person_id_base_idx` (`ID`),

  KEY `person_email_idx` (`EMAIL`),

  KEY `person_zip_idx` (`ZIP`),

  KEY `person_last_name_idx` (`LAST_NAME`),

  KEY `person_first_name_idx` (`FIRST_NAME`),

  KEY `person_generation_idx` (`GENERATION`),

  KEY `person_birthday_idx` (`BIRTHDAY`),

  KEY `person_user_created_idx` (`USER_CREATED`)

) TYPE=MyISAM |

 

 

Reply via email to