相关疑难解决方法(0)

MySQL FULLTEXT搜索超过> 1表

作为这个问题的更一般情况,因为我认为它可能会引起更多人的兴趣...在两个表上执行全文搜索的最佳方法是什么?假设有三个表,一个用于程序(带有submitter_id),另一个用于带有object_id的标签和描述:外键引用程序中的记录.我们希望程序的submitter_id在其标签或描述中包含某些文本.我们必须使用MATCH AGAINST,因为我不会在这里讨论.不要挂在这方面.

programs
  id
  submitter_id
tags_programs
  object_id
  text
descriptions_programs
  object_id
  text
Run Code Online (Sandbox Code Playgroud)

以下工作并在20ms左右执行:

SELECT p.submitter_id
FROM programs p
WHERE p.id IN
    (SELECT t.object_id
    FROM titles_programs t
    WHERE MATCH (t.text) AGAINST ('china')
UNION ALL
    SELECT d.object_id
    FROM descriptions_programs d
    WHERE MATCH (d.text) AGAINST ('china'))
Run Code Online (Sandbox Code Playgroud)

但我尝试将此作为JOIN重写如下,并且它运行了很长时间.我必须在60秒后杀死它.

SELECT p.id 
FROM descriptions_programs d, tags_programs t, programs p
WHERE (d.object_id=p.id AND MATCH (d.text) AGAINST ('china'))
OR    (t.object_id=p.id AND MATCH (t.text) AGAINST ('china'))
Run Code Online (Sandbox Code Playgroud)

出于好奇,我用AND取代了OR.这也在几毫秒内运行,但这不是我需要的.上面的第二个查询出了什么问题?我可以和UNION和子选择一起生活,但我想了解.

mysql full-text-search

4
推荐指数
1
解决办法
3885
查看次数

标签 统计

full-text-search ×1

mysql ×1