optimize select query with ORDER BY and MATCH AGAINST

前端 未结 1 1065
半阙折子戏
半阙折子戏 2020-12-19 09:31

The following query takes 25 seconds with 2 table joins. The first posts table has 150,00 rows, topics table has 50,000 rows. Anyone know how I can speed this up.

         


        
1条回答
  •  醉梦人生
    2020-12-19 09:57

    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 
    

    0 讨论(0)
提交回复
热议问题