Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新mysql列类型是否需要一个过程?_Mysql_Types - Fatal编程技术网

更新mysql列类型是否需要一个过程?

更新mysql列类型是否需要一个过程?,mysql,types,Mysql,Types,我正在尝试优化我的mysql表(MyISAM),我用phpmyadmin更改了一些列类型,主要是从int改为smallint、medium int等。在我这样做之后,mysql真的陷入了困境,服务器负载变得非常高。我在一个活动站点上做了这件事,我想这就是问题所在,但即使在将站点置于维护模式并等待负载下降之后,负载仍然会变得疯狂。最后,我必须删除这些表,并用它们的原始列类型重新创建它们,以便顺利恢复工作。。。那么,在更改列类型之前和之后,我应该做什么特别的事情呢 将表与两种不同的列类型连接也会产生

我正在尝试优化我的mysql表(MyISAM),我用phpmyadmin更改了一些列类型,主要是从int改为smallint、medium int等。在我这样做之后,mysql真的陷入了困境,服务器负载变得非常高。我在一个活动站点上做了这件事,我想这就是问题所在,但即使在将站点置于维护模式并等待负载下降之后,负载仍然会变得疯狂。最后,我必须删除这些表,并用它们的原始列类型重新创建它们,以便顺利恢复工作。。。那么,在更改列类型之前和之后,我应该做什么特别的事情呢

将表与两种不同的列类型连接也会产生问题吗?即id INT(11)与MEDIUMINT(8)连接。我想有一次我做到了。你说:

“将表与两种不同的列类型连接也会产生问题吗?即id INT(11)与MEDIUMINT(8)连接。我想我曾经这样做过。” 对。这可能会降低性能,因为当您对两个不同类型的列执行联接时,RBDM必须对其中一列中的每个值执行动态类型转换,以匹配另一列中的类型,以便进行比较。因此,您要加入的列应该始终是相同的类型,最好也使用外键(如果您使用的是InnoDB表类型)。

您说过:

“将表与两种不同的列类型连接也会产生问题吗?即id INT(11)与MEDIUMINT(8)连接。我想我曾经这样做过。”
对。这可能会降低性能,因为当您对两个不同类型的列执行联接时,RBDM必须对其中一列中的每个值执行动态类型转换,以匹配另一列中的类型,以便进行比较。出于这个原因,您加入的列应该始终是相同的类型,最好也使用外键(如果您使用的是InnoDB表类型)。

我还想添加:在mysql查询之前使用EXPLAIN查看列是如何加入的(可能会使用tmp表,这太过分了)@dusoft Great point。解释将向您显示正在使用的键,如果发生任何完整的表扫描,等等。好的,我会确保这样做。除此之外,我应该能够正常更改所有列类型?你需要删除并重新创建索引吗?@Roger:不需要重新创建索引,RBDM应该为你做。但是,如果数据类型发生变化,则需要删除并重新创建外键。我还想添加:在mysql查询之前使用EXPLAIN查看列是如何连接的(可能会使用tmp表,这太过分了)@dusoft Great point。解释将向您显示正在使用的键,如果发生任何完整的表扫描,等等。好的,我会确保这样做。除此之外,我应该能够正常更改所有列类型?你需要删除并重新创建索引吗?@Roger:不需要重新创建索引,RBDM应该为你做。但如果数据类型发生变化,则需要删除并重新创建外键。