在MEDIUMTEXT上使用MySQL进行全字搜索

时间:2015-03-22 18:33:50

标签: php mysql regex full-text-search

我知道很多次都讨论过这个问题。 无论如何,我想再弄清楚。

好吧,我有桌子和#34;文章"包含以下字段:

  • title(varchar 255)
  • keywords(varchar 255)
  • content_body_1(mediumtext)
  • content_body_2(mediumtext)

标题"标题"和"关键字"。但是,MEDIUMTEXT字段没有索引。

我需要表达"整个单词"搜索所有这些字段。我现在使用REGEXP执行此操作:

SELECT * FROM `articles` WHERE `content_body_1` REGEXP '[[:<:]]"keyword"[[:>:]]'

等等。 100篇文章没问题,但1000篇文章非常慢(2-3秒)。 REGEXP不在MySQL中使用索引。如果我有10000篇文章怎么办?有没有办法通过整个关键字加快搜索速度?

我怎么能得到它? FULLTEXT快得多吗?如果是 - 我该如何设计我的数据库?还有什么我应该用FULLTEXT限制搜索最小字符?

感谢。

2 个答案:

答案 0 :(得分:1)

当它适用时,

FULLTEXT 比更快。作为测试,我在0.06秒内在173,979行中找到了4行中的一行。

您需要ALTER TABLE tbl ADD FULLTEXT(content_body_1);为该列构建FT索引。

如果要搜索所有列,可以将多个列合并为一个FT索引。如果您还想搜索单个列,则添加单列FT索引。

研究细节; MyISAM有一套警告; InnoDB有不同的设置。

答案 1 :(得分:-1)

为什么使用正则表达式进行全文搜索?您可以轻松使用%字符,它可能比执行正则表达式快得多。

SELECT * FROM articles WHERE content_body_1 LIKE'%keyword%'

这将找到您的content_body_1在其中包含关键字的任何行。