optimize select query with ORDER BY and MATCH AGAINST

随声附和 提交于 2019-11-29 10:37:45

The OP has found an answer here, just in case the link disappears, below is the text in that link:

DROP TABLE IF EXISTS `wordpress`.`bb_posts_fulltext_search`;
CREATE TABLE `wordpress`.`bb_posts_fulltext_search` (
`post_id` int(10) unsigned NOT NULL,
`post_text` longtext,
`topic_id` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`post_id`,`topic_id`) USING BTREE,
FULLTEXT KEY `post_text` (`post_text`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `wordpress`.`bb_topics_fulltext_search`;
CREATE TABLE `wordpress`.`bb_topics_fulltext_search` (
`topic_id` int(11) NOT NULL,
`topic_title` varchar(255) DEFAULT NULL,
`topic_posts` bigint(20) DEFAULT NULL,
`topic_poster_name` varchar(40) DEFAULT NULL,
`topic_last_post_id` bigint(20) DEFAULT NULL,
`forum_id` int(11) DEFAULT NULL,
`parent_group_id` int(11) DEFAULT NULL,
`child_group_id` int(11) DEFAULT NULL,
`topic_last_post_time` datetime DEFAULT NULL,
PRIMARY KEY (`topic_id`),
KEY `topic_last_post_time` (`topic_last_post_time`),
FULLTEXT KEY `topic_title` (`topic_title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

SELECT
  topic_search.topic_id,
  topic_search.topic_title,
  topic_search.topic_posts,
  topic_search.topic_title,
  topic_search.topic_poster_name,
  topic_search.topic_last_post_id,
  topic_search.topic_last_post_time,
  MATCH(post_search.post_text,topic_search.topic_title) 
    AGAINST('searchterms' IN BOOLEAN MODE) AS score
FROM bb_posts_fulltext_search as post_search
LEFT JOIN bb_topics_fulltext_search as topic_search
  ON post_search.topic_id = topic_search.topic_id
WHERE 
  MATCH(post_search.post_text,topic_search.topic_title) 
    AGAINST('searchterms' IN BOOLEAN MODE)
GROUP BY topic_search.topic_id
ORDER BY score DESC
LIMIT 0,6 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!