我正在进行 mysql 全文搜索。
我的数据库表article1
有~18000
篇文章,article2
有~7000
篇文章,article3
有 ~13000
篇文章。 FIELD cat 是一个 INDEX 字段
现在我想做联合搜索。有5组单词放入3个表中,匹配出结果。但处理时间为3.1213495136秒
。 (我添加 microtime()
来查看需要花费多少时间)。有没有办法优化mysql全文联合搜索?谢谢。
(SELECT title,content,date FROM article1 WHERE
(cat='novel' AND MATCH (title,content) AGAINST ('+Mary +Barnard' IN BOOLEAN MODE))
OR
(cat='novel' AND MATCH (title,content) AGAINST ('+Patricia +Beer' IN BOOLEAN MODE))
OR
(cat='novel' AND MATCH (title,content) AGAINST ('+Aphra +Behn' IN BOOLEAN MODE))
OR
(cat='novel' AND MATCH (title,content) AGAINST ('+Judy +Blume' IN BOOLEAN MODE))
OR
(cat='novel' AND MATCH (title,content) AGAINST ('+Elizabeth +Bowen' IN BOOLEAN MODE)))
UNION
(SELECT title,content,date FROM article2 WHERE
(MATCH (title,content) AGAINST ('+Mary +Barnard' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Patricia +Beer' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Aphra +Behn' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Judy +Blume' IN BOOLEAN MODE))
OR
(MATCH (title,content)AGAINST ('+Elizabeth +Bowen' IN BOOLEAN MODE)))
UNION
(SELECT title,content,date FROM article3 WHERE
(MATCH (title,content) AGAINST ('+Mary +Barnard' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Patricia +Beer' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Aphra +Behn' IN BOOLEAN MODE))
OR
(MATCH (title,content) AGAINST ('+Judy +Blume' IN BOOLEAN MODE))
OR
(MATCH (title,content)AGAINST ('+Elizabeth +Bowen' IN BOOLEAN MODE)))
Order By date DESC LIMIT 10
最佳答案
您应该做的第一件事是添加
Order By date DESC LIMIT 10
进入每个子查询,因为最终不需要超过 10 个结果。
所有表中的“日期”字段还必须有索引。
alter table "TABLENAME" add index date_idx(date);
另外:
您可以通过将搜索词更改为“() | ()”来缩短并稍微加快查询速度
(SELECT title,content,date FROM article1 WHERE
(cat='novel' AND MATCH (title,content) AGAINST ('(+Mary +Barnard) | (+Patricia +Beer) | (+Aphra +Behn) | (+Judy +Blume) | (+Elizabeth +Bowen)' IN BOOLEAN MODE))
Order By date DESC LIMIT 10)
UNION
(SELECT title,content,date FROM article2 WHERE
(MATCH (title,content) AGAINST ('(+Mary +Barnard) | (+Patricia +Beer) | (+Aphra +Behn) | (+Judy +Blume) | (+Elizabeth +Bowen)' IN BOOLEAN MODE))
Order By date DESC LIMIT 10)
UNION
(SELECT title,content,date FROM article3 WHERE
(MATCH (title,content) AGAINST ('(+Mary +Barnard) | (+Patricia +Beer) | (+Aphra +Behn) | (+Judy +Blume) | (+Elizabeth +Bowen)' IN BOOLEAN MODE))
Order By date DESC LIMIT 10)
Order By date DESC LIMIT 10
关于php - 如何优化mysql全文联合搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721483/