【问题标题】:MySQL: Split longtext column into multiple text columnsMySQL:将长文本列拆分为多个文本列
【发布时间】:2016-07-28 07:26:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: mysql full-text-search longtext fulltext-index


    【解决方案1】:

    我已经尝试过以下简单的 SQL 语句,但耗时太长 查找记录:从电子邮件中选择 id,其中描述为“%hello” 世界%";

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

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

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

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

    是的,你会感到惊喜的!

    【讨论】:

    • 我已经尝试在表格上添加全文索引,但它失败了。这是对新创建的表的另一次尝试的输出。 create table sample(description longtext); - Query OK, 0 rows affected (0.20 sec)alter table sample add fulltext index descidx(description); - ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes。使用的引擎是:InnoDB。
    • 我想我找到了我的问题。我目前使用的是 mysql 5.5 而不是 5.6。全文索引仅从 mysql 5.6 开始添加到 InnoDB。
    • 是的,这是正确的,幸运的是升级是一个无痛的过程
    • 我正在运行 Debian 操作系统。有人提到 MySQL 5.6 尚不可用。这是真的还是有任何步骤可以将其从 5.5 更新到 5.6?一旦我成功更新了 MySQL 并在系统上测试了搜索,我将发布我采取的步骤作为我问题的答案。我不是系统管理员,对 MySQL 等升级程序了解有限。
    • 安装 5.7 一切顺利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多