我知道这个问题已经讨论过很多次了。总之,我想再想一次。
好吧,我有表中的“文章”包含以下字段:
有一个关于“标题”和“关键字”的索引。但是,没有关于MEDIUMTEXT字段的索引。
我需要在所有这些字段上执行“整个单词”搜索。我现在使用REGEXP进行此操作:
SELECT * FROM `articles` WHERE `content_body_1` REGEXP '[[:<:]]"keyword"[[:>:]]'
诸若此类。它可以写100篇文章,但是它在1000篇文章上非常慢(2-3秒)。REGEXP在MySQL中不使用索引。如果我有10000篇文章呢?有没有任何方法可以更快地搜索整体关键字?
我怎么能拿到呢?全文更快吗?如果是-我如何设计我的数据库?此外,我应该如何处理全文限制的最小字符搜索?
谢谢。
发布于 2015-03-31 00:48:36
当全文应用时,它比REGEXP快得多。作为一个测试,我在0.06秒内在173,979行中找到了4行中的一个单词。
你需要做ALTER TABLE tbl ADD FULLTEXT(content_body_1);
来为这一列建立一个FT索引。
您可以将多列合并成一个FT索引--如果您想搜索所有这些列的话。如果还想搜索单个列,则添加单列FT索引.
研究细节;MyISAM有一组警告;InnoDB有一个不同的集合。
发布于 2015-03-22 21:14:21
为什么要使用regexp进行全文搜索?您可以很容易地使用%字符,而且它可能比执行正则表达式快得多。
从articles
中选择*,其中content_body_1
喜欢‘%关键字%’
这将找到content_body_1在其中某个地方包含关键字的任何行。
https://stackoverflow.com/questions/29198226
复制相似问题