我知道很多次都讨论过这个问题。 无论如何,我想再弄清楚。
好吧,我有桌子和#34;文章"包含以下字段:
标题"标题"和"关键字"。但是,MEDIUMTEXT字段没有索引。
我需要表达"整个单词"搜索所有这些字段。我现在使用REGEXP执行此操作:
SELECT * FROM `articles` WHERE `content_body_1` REGEXP '[[:<:]]"keyword"[[:>:]]'
等等。 100篇文章没问题,但1000篇文章非常慢(2-3秒)。 REGEXP不在MySQL中使用索引。如果我有10000篇文章怎么办?有没有办法通过整个关键字加快搜索速度?
我怎么能得到它? FULLTEXT快得多吗?如果是 - 我该如何设计我的数据库?还有什么我应该用FULLTEXT限制搜索最小字符?
感谢。
答案 0 :(得分:1)
FULLTEXT
您需要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在其中包含关键字的任何行。