从查询中删除filesort

时间:2011-05-06 20:23:57

标签: mysql sql filesort

  

可能重复:
  optimize select query with ORDER BY and MATCH AGAINST

Filesort导致此查询运行速度非常慢。任何人都会看到这一点,并弄清楚如何优化它。

创建bb_posts_fulltext_search

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; 

创建bb_topics_fulltext_search

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;

SQL

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 post_search
LEFT JOIN bb_topics_fulltext_search 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 

EXPLAIN

+----+-------------+--------------+--------+---------------+---------+---------+----------------------------------+--------+---------------------------------+
| id | select_type | table        | type   | possible_keys | key     | key_len | ref                              | rows   | Extra                           |
+----+-------------+--------------+--------+---------------+---------+---------+----------------------------------+--------+---------------------------------+
|  1 | SIMPLE      | post_search  | ALL    | NULL          | NULL    | NULL    | NULL                             | 158972 | Using temporary; Using filesort |
|  1 | SIMPLE      | topic_search | eq_ref | PRIMARY       | PRIMARY | 4       | c1wordpress.post_search.topic_id |      1 | Using where                     |
+----+-------------+--------------+--------+---------------+---------+---------+----------------------------------+--------+---------------------------------+

0 个答案:

没有答案