小编Sae*_*eid的帖子

优化 MySQL“可选”FULLTEXT 多表搜索

我需要根据客户输入选择带有optional columnsinwhere子句的数据。我的查询是这样的:

SELECT a.id, a.title, b.txt AS b_txt, c.txt AS c_txt 
FROM a 
LEFT JOIN b ON a.b_id=b.id 
LEFT JOIN c ON a.c_id=c.id 
where a.status=1 
AND (0=@bid OR a.b_id=@bid) 
AND (0=@cid OR a.c_id=@cid) 
Run Code Online (Sandbox Code Playgroud)

@bid并且@cid是客户端输入,如果客户端不提供输入,则这些值必须>0使用默认值0

客户端可以不提供任何输入,因此它将选择status=1忽略b_idc_id列的所有数据

客户可以提供@bid或提供@cid两者,查询将相应地选择。

表引擎是 InnoDB,列有索引,外键和关系集。

到目前为止一切都很好。EXPLAIN SQL显示选择是根据提供的索引完成的。

现在我需要在所有 3 个表上添加全文搜索来查询是我遇到问题的地方。如果客户端提供任何关键字进行搜索,文本搜索也是可选的。

全文索引定义为 a.title、b.txt 和 c.txt

我将查询更改为:

SELECT a.id, a.title, b.txt AS b_txt, c.txt AS c_txt …
Run Code Online (Sandbox Code Playgroud)

mysql optimization full-text-search

6
推荐指数
1
解决办法
1424
查看次数

标签 统计

full-text-search ×1

mysql ×1

optimization ×1