我知道更改具有固定宽度行的表以具有可变宽度行(通过将CHAR列更改为VARCHAR)会影响性能。
但是我的问题是,给定一个具有可变宽度行的预先存在的表(由于许多VARCHAR列),并且因此已经支付了性能损失,是否会添加另一个可变长度列进一步影响性能?
我的预感是,它不会,最大的性能损失是从固定宽度行切换到可变宽度行,而添加另一个可变宽度列会产生微不足道的影响。
答案 0 :(得分:2)
是和否。确实,可变宽度字符列稍微慢于固定宽度字符列。但“惩罚”(或绩效成本)是累计和每列。因此,通常(固定宽度或其他方面)添加到查询中的每一列都会影响性能(当您查询更多数据时,获取所有数据需要更长时间。)
答案 1 :(得分:1)
您添加到表中的每个可变长度列会使检索数据变得更糟。 另一个考虑因素是 - 如果变量长度列是Query(filter / Where子句)的一部分,并且您将要在索引中使用它们。索引中的可变长度字段也会增加索引开销。有关详细信息,您需要查看正在使用的特定数据库的文档。例如http://dev.mysql.com/doc/refman/5.6/en/innodb-table-and-index.html
答案 2 :(得分:1)
不确定。将数据行提取到组件字段中将需要一些额外的周期。
然而,这几乎可以通过几乎确定的行大小减少来抵消 - 这意味着每个数据页面的行数更多,因此可以更快地查找整个行。
答案 3 :(得分:0)
它将使 tiny (以微秒为单位)与数据检索性能产生差异,但使用错误数据类型的人类性能影响只是为了挤出数据库中的每一个最后一次丢弃可能很大,因此成本很高。
使用最适合您在数据库中持久保存的属性的数据类型 不要被“性能”所驱动,受软件开发的常规指导方针驱动,如可读性,可维护性,使用能力等。
使用错误的数据类型,您的代码会更复杂(可能会失去比您获得的更多的性能提升),并且您会后悔这样做。我怀疑你无论如何都会注意到这些收益。
只有当您有证据表明存在问题时才会这样做,并且问题足够重要。做你提出的建议被称为“过早优化”,可能是最糟糕的设计策略。