我注意到,当使用额外的where子句或连接来减少搜索池时,MySQL中的全文搜索似乎并没有加快速度。
例如:
SELECT * FROM `blog_posts`
WHERE `id` = 1
AND MATCH (post_body) AGAINST ('+mango +smoothie' IN BOOLEAN MODE);
所需的时间
SELECT * FROM `blog_posts`
WHERE MATCH (post_body) AGAINST ('+mango +smoothie' IN BOOLEAN MODE);
因此,看起来MATCH子句似乎总是针对整个数据库工作,即使您使用限制性的where子句对其进行预过滤。这是设计的吗?有什么方法可以解决这个问题吗?我有这样的情况,我想针对一个相当小的子集运行布尔搜索子句,而查询花费了很长时间。
1条答案
按热度按时间euoag5mw1#
是的,它是设计的。
MySQL通常会为每个表引用使用一个索引。如果它使用了全文索引,就不会使用其他索引。
因此,是否有额外的条件、连接或索引来支持这些条件或连接并不重要,无论哪种方式,都将强制检查与全文搜索匹配的所有行。