Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
VARCHAR或INT列-MySQL的性能变化有多大_Mysql_Performance_Integer_Innodb_Varchar - Fatal编程技术网

VARCHAR或INT列-MySQL的性能变化有多大

VARCHAR或INT列-MySQL的性能变化有多大,mysql,performance,integer,innodb,varchar,Mysql,Performance,Integer,Innodb,Varchar,我有很多表,有数百万行,还有MySQL。这些表用于存储日志行。 我在VARCHAR(50)中有一个字段“country”。此列上有一个索引。 将countryId存储在INT而不是这个国家字段中会改变很多性能吗 谢谢大家! 你的问题比最初看起来要复杂一点。简单的答案是,Country是一个最多50个字符的字符串。将其替换为4字节整数将减少字段所需的存储空间。更少的存储意味着处理查询时更少的I/O开销和更小的索引。当然也有例外情况。如果country通常具有NULL值,则当前存储可能比具有id更有

我有很多表,有数百万行,还有MySQL。这些表用于存储日志行。 我在VARCHAR(50)中有一个字段“country”。此列上有一个索引。 将countryId存储在INT而不是这个国家字段中会改变很多性能吗


谢谢大家!

你的问题比最初看起来要复杂一点。简单的答案是,
Country
是一个最多50个字符的字符串。将其替换为4字节整数将减少字段所需的存储空间。更少的存储意味着处理查询时更少的I/O开销和更小的索引。当然也有例外情况。如果
country
通常具有
NULL
值,则当前存储可能比具有id更有效

但是,当您考虑保持字段的最新状态时,它会变得更复杂一些。与参考表的一个区别是,这些国家现在已经标准化,而不是临时名称。总的来说,这是一件好事。另一方面,国家确实会随着时间的推移而变化,因此你必须随时准备添加“南苏丹”或“东帝汶”

如果您的数据库需要大量的插入/更新,那么更改country字段需要在引用表中查找正确的值,也许还需要在那里插入一条新记录


我的意见是“天哪……一开始就这样设置数据库是个好主意”。此时,您需要了解维护国家/地区参考表对应用程序的影响,以使数据结构更高效、更准确,从而获得较小的性能增益。

您的问题比最初看起来要复杂一些。简单的答案是,
Country
是一个最多50个字符的字符串。将其替换为4字节整数将减少字段所需的存储空间。更少的存储意味着处理查询时更少的I/O开销和更小的索引。当然也有例外情况。如果
country
通常具有
NULL
值,则当前存储可能比具有id更有效

但是,当您考虑保持字段的最新状态时,它会变得更复杂一些。与参考表的一个区别是,这些国家现在已经标准化,而不是临时名称。总的来说,这是一件好事。另一方面,国家确实会随着时间的推移而变化,因此你必须随时准备添加“南苏丹”或“东帝汶”

如果您的数据库需要大量的插入/更新,那么更改country字段需要在引用表中查找正确的值,也许还需要在那里插入一条新记录


我的意见是“天哪……一开始就这样设置数据库是个好主意”。在这一点上,您需要了解维护国家/地区参考表对应用程序的影响,以使数据结构更高效、更准确,从而获得较小的性能增益。

INT值上的索引比字符串数据类型(VARCHAR)上的索引表现出更好的性能。 因为搜索/匹配一个整数总是比字符串快,所以在索引下面实现的搜索算法也遵循同样的原理


在本例中,使用INT类型上的索引将比使用VARCHAR获得更好的性能

INT值上的索引显示出比字符串数据类型(VARCHAR)上应用的索引更好的性能。 因为搜索/匹配一个整数总是比字符串快,所以在索引下面实现的搜索算法也遵循同样的原理


在本例中,使用INT类型上的索引将比使用VARCHAR获得更好的性能

int始终是1字节。varchar是numchars+1字节。因此,是的,它可以对speed@user1281385:一个
int
不仅仅是一个字节。这将使其范围仅为0到256。但它通常是4个字节。@juergend-oops是的,不错。考虑到另一点,答案仍然是,国家有时会改变他们的名字——这意味着外国国家来认识这些国家的新名称——缅甸-缅甸,以期。INT是1字节,总是。varchar是numchars+1字节。因此,是的,它可以对speed@user1281385:一个
int
不仅仅是一个字节。这将使其范围仅为0到256。但它通常是4个字节。@juergend-oops是的,不错。考虑到另一点需要考虑的是,国家有时会改变他们的名字——这意味着外国国家开始以新的名字来认识这些国家——例如缅甸——缅甸。是的,我知道所有这些对维护的影响,以及对磁盘的影响。我只关心性能!我想我会改变一切,即使这需要一点时间。即使性能增益很小,它仍然是一些东西!是的,我知道维护和磁盘sapces的所有影响。我只关心性能!我想我会改变一切,即使这需要一点时间。即使性能增益很小,它仍然是一些东西!