我的查询语法有问题:
SELECT `users`.`name`, `posts`.*
FROM `posts` 
LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id`
WHERE MATCH (title,body) AGAINST('search')
只能使用MATCH一个,不能同时使用...请告诉我如何解决它...
要检查两者是否在"search"and中,我推荐这种不明显的组合。(我忽略了与问题无关。)titlebodyusers
SELECT  p1.*
    FROM  posts AS p1
    WHERE  MATCH(p1.title) AGAINST("search" IN BOOLEAN MODE)
      AND  EXISTS (
        SELECT  *
            FROM  posts AS p2
            WHERE  MATCH(p2.body) AGAINST("search" IN BOOLEAN MODE) 
                  ) 
使用 时FULLTEXT,我认为优化器不知道如何有效地应用 FULLTEXT 两次,所以这是一种偷偷摸摸的方法来做到这一点。
我title首先选择它的假设是它有更少的单词,因此不需要进行其他测试。
“索引合并相交”可能会为此起作用:
SELECT  *
    FROM  posts
    WHERE  MATCH(title) AGAINST("search" IN BOOLEAN MODE)
      AND  MATCH(body)  AGAINST("search" IN BOOLEAN MODE) 
在这两种情况下,您都需要:
FULLTEXT(title),
FULLTEXT(body)
包含两列的单个 ft 索引没有用处。
请提供SHOW CREATE TABLE,EXPLAIN SELECT ...如果您需要进一步讨论。
您是否拥有ENGINE=MyISAM或可能很重要ENGINE=InnoDB;这两种实现完全不同。