当前位置:  开发笔记 > 后端 > 正文

为什么在mysql中重命名列需要这么长时间?

如何解决《为什么在mysql中重命名列需要这么长时间?》经验,为你挑选了2个好方法。

我有一个12 GB的表格充满了图片,我正在尝试重命名保存数据的blob列,这是永远的.有人可以通过吹嘘为什么要重命名专栏这么长时间给我一个打击?我原本以为无论表的大小如何,这个操作都会很快?

编辑:我运行的查询如下

 alter table `rails_production`.`pictures` change `data` `image_file_data` mediumblob NULL

似乎大部分时间都花在等待mysql制作图片表的临时副本上,因为它非常大,需要一段时间才能完成.

它是要做的事情列表,将图片存储从数据库更改为文件系统.

EDIT2:Mysql Server版本:5.0.51a-24 + lenny2(Debian)



1> outis..:

我不能给你逐个打击(功能请求#34354会有所帮助,除了它可能不会被反向移植到MySQL 5.0),但额外的时间是因为ALTER ... CHANGE可能会改变列的类型(以及列属性,如果有的话),这需要转换存储在列中的值和其他检查.MySQL 5.0不包括新类型和属性与旧版本相同的优化.从ALTERMySQL 5.0下的文档:

在大多数情况下,ALTER TABLE通过制作原始表的临时副本来工作.对副本执行更改,然后删除原始表并重命名新表.在执行ALTER TABLE时,原始表可由其他会话读取.对表的更新和写入将停止,直到新表准备就绪,然后自动重定向到新表,而不会有任何失败的更新.

[...]

如果对RENAME以外的ALTER TABLE使用任何选项,MySQL总是会创建一个临时表,即使数据不需要严格复制(例如更改列的名称时).

在5.1下,ALTER还有一些额外的优化:

在某些情况下,不需要临时表:

通过更改表的.frm文件而不是触摸表内容,可以立即修改仅修改表元数据而不是表数据的更改.以下更改是可以通过这种方式进行的快速更改:

重命名列,InnoDB存储引擎除外.

[...]


重命名列,InnoDB存储引擎除外.:(

2> MarkR..:

因为MySQL会在您进行架构更改时重建整个表.

这样做是因为它是在某些情况下执行此操作的唯一方法,并且无论如何它使服务器更容易重建它.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有