The query is a search query to search through out history and activities for a keyword. Both history and activities have a subject and a message. I tried just focusing on the activities table and made the subject and message FULLTEXT. Here is the new SQL statement: [code] SELECT DISTINCT user_id, person_name_first f_name, person_name_last l_name, person_email_primary email, person_address_a address, person_address_a2 address_2, person_address_a_city city, person_address_a_zip zip, person_address_a_state state, user__user_group.usr_usr_grp_group_id group_id, user.day_of_acc date_added, UNIX_TIMESTAMP(user.user_last_login ) date_viewed FROM person INNER JOIN user ON user_person_id = person_id INNER JOIN user__user_group ON usr_usr_grp_user_id = user_id INNER JOIN history ON history_created_by = user_id INNER JOIN activity ON activity_owner_id = user_id WHERE user_id IS NOT NULL AND (MATCH (activity_subject, activity_message) AGAINST ('%string%')) [/code] I recieve the following error: Can't find FULLTEXT index matching the column list Here is the create table statement for activity: CREATE TABLE `activity` (\n `activity_id` int(13) unsigned NOT NULL auto_increment,\n `activity_type` enum('appt','task') NOT NULL default 'task',\n `activity_expires_on` enum('exp date','completion','indefinite') NOT NULL default 'exp date',\n `activity_created_by` int(7) unsigned NOT NULL default '0',\n `activity_owner_type` enum('user','group') NOT NULL default 'user',\n `activity_owner_id` int(7) unsigned NOT NULL default '0',\n `activity_with_type` enum('owner','agent','customer') NOT NULL default 'customer',\n `activity_with_id` int(9) unsigned default NULL,\n `activity_status` int(1) unsigned NOT NULL default '0',\n `activity_availablity` enum('available','unavailable') NOT NULL default 'available',\n `activity_date_assigned` timestamp NULL default NULL,\n `activity_date_scheduled` timestamp NULL default NULL,\n `activity_date_completed` timestamp NULL default NULL,\n `activity_date_expires` timestamp NULL default NULL,\n `activity_length` int(7) NOT NULL default '30',\n `activity_subject` varchar(45) default NULL,\n `activity_message` text,\n `activity_reminder_type` enum('none','txt-msg','email') NOT NULL default 'none',\n `activity_reminder_offset` int(5) unsigned default NULL,\n `activity_reminder_date_send` timestamp NULL default NULL,\n `activity_reminder_date_sent` timestamp NULL default NULL,\n `activity_reminder_send_to` varchar(50) default NULL,\n `recur` varchar(250) NOT NULL default 'monday',\n `prior` varchar(2) NOT NULL default 'b',\n PRIMARY KEY (`activity_id`),\n KEY `activity_lookup` (`activity_owner_id`,`activity_date_scheduled`,`activity_id`,`activity_owner_type`),\n KEY `activity_date_expires` (`activity_date_expires`),\n KEY `activity_with_type` (`activity_with_type`,`activity_with_id`),\n KEY `activity_status` (`activity_status`),\n KEY `activity_unavailable` (`activity_availablity`),\n FULLTEXT KEY `activity_message` (`activity_message`),\n FULLTEXT KEY `activity_subject` (`activity_subject`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='activity information' Also here is the output from the explain of the original SQL statement: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE activity ALL activity_lookup,activity_message,activity_subject NULL NULL NULL 623 Using where; Using temporary 1 SIMPLE user eq_ref PRIMARY PRIMARY 4 f_agent.activity.activity_owner_id 1 Using where 1 SIMPLE user__user_group ref usr_usr_grp_user_id usr_usr_grp_user_id 4 f_agent.user.user_id 1 Using index 1 SIMPLE person eq_ref PRIMARY PRIMARY 4 f_agent.user.user_person_id 1 Using where 1 SIMPLE history ref history_lookup history_lookup 4 f_agent.user.user_id 307 Using index; Distinct