一尘不染

优化mysql全文搜索

mysql

我想在我的网页中进行全文搜索。我需要分页进行搜索。我的数据库每张表有50,000+行。我已经改变了我的表,并使其(title,content,date)成为索引。该表始终处于更新状态,仍然有一个id自动增加的列。而最新date的总是在表格的末尾。

date  varchar(10)
title  text
content  text

但整个查询时间将花费1.5+ seconds。我通过Google搜索了许多文章,有的文章写道,只有限制Index字段字长才能帮助更快地进行搜索。但作为一种text类型,它can not会像这样改变一定的长度(我尝试过ALTER TABLE table_1 CHANGE标题`titleTEXT(500) CHARACTER
SET utf8 COLLATE utf8_unicode_ci NOT NULL`,不起作用)

date  varchar(10)
title  text(500)
content  text(1000)

因此,除了Sphinx第三方脚本。如何仅使用sql优化全文搜索?查询代码在这里:

(SELECT 
title,content,date 
FROM table_1 
WHERE MATCH (title,content,date) 
AGAINST ('+$Search' IN BOOLEAN MODE)) 
UNION 
(SELECT 
title,content,date 
FROM table_2 
WHERE MATCH (title,content,date) 
AGAINST ('+$Search' IN BOOLEAN MODE)) 
Order By date DESC

谢谢。


阅读 407

收藏
2020-05-17

共1个答案

一尘不染

根据问题的后续注释,您在列上拥有btree索引,而不是全文本索引。

对于针对搜索的匹配(标题,内容),您需要:

CREATE FULLTEXT INDEX index_name ON tbl_name (title,content);

我不确定它是否会接受其中的日期字段(后者可能根本不相关)。

2020-05-17