2

我对需要解决的数据有一点挑战。我有一个表格,其中电子邮件的纯文本存储在 longtext 列中。在我开始在框架中开发之前是这样的。已经有超过一百万行存储了大型电子邮件。

我需要能够在该字段中搜索文本,但在返回任何结果之前需要很长时间。这并不理想,因为有数百名用户在使用该系统,他们需要能够搜索电子邮件内容。

我尝试了以下简单的 SQL 语句,但查找记录的时间太长:
select id from emails where description like "%hello world%";

根据 MySQL 文档,全文索引只能用于 char、varchar 和 text 字段。

谁能建议一种在长文本列中搜索的有效方法?

或者

是否有任何 SQL 方法/命令可用于遍历表并将长文本字段的内容拆分为多个文本列以进行全文索引?

4

1 回答 1

1

我尝试了以下简单的 SQL 语句,但查找记录的时间太长:从电子邮件中选择 id,其中描述为“%hello world%”;

%something%不幸的是,即使在 varchar 字段上,mysql 也不能使用索引进行查询。事实上,它也不能在 '%something' 查询上使用索引。只有当通配符出现在字符串的末尾时,才能使用索引。

根据 MySQL 文档,全文索引只能用于 char、varchar 和 text 字段。

我希望这里的文档更清楚,这是关于 TEXT 系列字段的。这意味着您实际上可以在 LONGTEXT 和 MEDIUMTEXT 类型的字段上创建索引。尝试这个:

CREATE TABLE ltxt(bada LONGTEXT);
ALTER TABLE ltxt ADD FULLTEXT INDEX ftxt2(bada);

是的,你会惊喜万分!

于 2016-07-28T12:32:06.237 回答