Mysql 向具有可变长度行的表中添加另一个可变长度列是否会进一步影响性能?
我知道,将具有固定宽度行的表更改为具有可变宽度行(通过将CHAR列更改为VARCHAR)会影响性能 然而,我的问题是,给定一个预先存在的具有可变宽度行的表(由于有许多VARCHAR列),因此在已经付出性能代价的情况下,添加另一个可变长度列是否会进一步影响性能Mysql 向具有可变长度行的表中添加另一个可变长度列是否会进一步影响性能?,mysql,sql,Mysql,Sql,我知道,将具有固定宽度行的表更改为具有可变宽度行(通过将CHAR列更改为VARCHAR)会影响性能 然而,我的问题是,给定一个预先存在的具有可变宽度行的表(由于有许多VARCHAR列),因此在已经付出性能代价的情况下,添加另一个可变长度列是否会进一步影响性能 我的直觉是不会,最大的性能损失是从固定宽度行切换到可变宽度行,并且添加另一个可变宽度列的影响可以忽略不计。是和否。确实,可变宽度字符列比固定宽度字符列稍慢。但“惩罚”(或性能成本)是累加的,按列计算。因此,添加到查询中的每一列(固定宽度或其
我的直觉是不会,最大的性能损失是从固定宽度行切换到可变宽度行,并且添加另一个可变宽度列的影响可以忽略不计。是和否。确实,可变宽度字符列比固定宽度字符列稍慢。但“惩罚”(或性能成本)是累加的,按列计算。因此,添加到查询中的每一列(固定宽度或其他)通常都会影响性能(当您查询更多数据时,获取所有数据所需的时间更长)。是和否。确实,可变宽度字符列比固定宽度字符列稍慢。但“惩罚”(或性能成本)是累加的,按列计算。因此,一般来说,添加到查询中的每一列(固定宽度或其他)都会影响性能(当您查询更多数据时,获取所有数据所需的时间更长)。添加到表中的每一个可变长度列都会使检索数据变得更糟。
另一个需要考虑的问题是——如果可变长度列是查询(filter/Where子句)的一部分,以及是否要在索引中使用这些列。索引中的可变长度字段也会增加索引开销。有关详细信息,您需要查看正在使用的特定数据库的文档。e、 g.添加到表中的每个可变长度列都会使检索数据变得更加困难。 另一个需要考虑的问题是——如果可变长度列是查询(filter/Where子句)的一部分,以及是否要在索引中使用这些列。索引中的可变长度字段也会增加索引开销。有关详细信息,您需要查看正在使用的特定数据库的文档。e、 g.这将对数据检索性能产生微小的影响(以微秒为单位),但使用错误的数据类型来压缩数据库中的每一个数据点可能会对人的性能产生巨大影响,因此成本高昂 使用最适合您在数据库中持久化的属性的数据类型。
不要被“性能”所驱动,要被软件开发的常规指导方针所驱动,比如可读性、可维护性、可使用性等 使用错误的数据类型,您的代码将更加复杂(可能会损失比您获得的更多的性能增益),并且您会后悔这样做。我怀疑你是否会注意到这些收益 只有当你有证据证明存在问题,并且问题大到足以产生影响时,才可以这样做。执行您的建议被称为“过早优化”,这可能是最糟糕的设计策略。它将对数据检索性能产生微小的影响(以微秒为单位),但是,使用错误的数据类型来压缩数据库中的每一个数据,对人的性能的影响可能会很大,因此成本高昂 使用最适合您在数据库中持久化的属性的数据类型。
不要被“性能”所驱动,要被软件开发的常规指导方针所驱动,比如可读性、可维护性、可使用性等 使用错误的数据类型,您的代码将更加复杂(可能会损失比您获得的更多的性能增益),并且您会后悔这样做。我怀疑你是否会注意到这些收益
只有当你有证据证明存在问题,并且问题大到足以产生影响时,才可以这样做。按照你的建议做被称为“过早优化”,这可能是最糟糕的设计策略。当然。将数据行提取到组件字段将需要额外的几个周期
然而,行大小几乎肯定会减少,这就抵消了这一点,这意味着每个数据页上会有更多的行,从而可以更快地进行全面查找。当然。将数据行提取到组件字段将需要额外的几个周期 然而,行大小几乎肯定会减少,这就抵消了这一点——这意味着每个数据页会有更多的行,从而可以更快地进行全面的查找