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 |