mysql text 慢_mysql innodb内连接用longtext很慢

我上周将一个项目的所有MySQL表从MyISAM迁移到InnoDB,以支持交易.为此,我使用了alter table的命令.

大多数工作正常,但是一个特定的查询运行速度非常慢,它总是为表’/tmp/#sql_xxxx_x.MYI提供错误错误的密钥文件

后来我将问题缩小到2个表的内连接,即用户表和协议表.并且内连接发生在用户的外键字段(即agreement_id)和协议的主键字段(即id)之间.

用户表只有50,000行数据,协议表也有一行.我们已经为用户的agreement_id设置了索引.

无论如何,这似乎是一个非常轻量级的查询,但事实证明它是整个瓶颈.

这是完整的协议架构:

CREATE TABLE IF NOT EXISTS `agreement` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`remark` varchar(200) NOT NULL,

`content` longtext NOT NULL,

`is_active` tinyint(1) NOT NULL,

`date_stamp` datetime NOT NULL,

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

我怀疑的一件事是协议表中的注释的longtext字段,但我们没有使用该字段进行内连接,实际上即使我们没有在查询结果中选择注释,查询也很慢.

最后,我们将协议表从innoDB转换回MyISAM,而不是一切正常.查询在不到1秒的时间内完成.

现在,我的问题是这里究竟发生了什么?这是否意味着一旦innoDB表包含任何文本字段,那么该表不能用于内连接?

我希望我能够知道真正的原因,以便我将来可以避免同样的问题.

非常感谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值