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表包含任何文本字段,那么该表不能用于内连接?

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

非常感谢.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部