为数据库列提供额外的大小/长度是否有任何缺点?

时间:2011-04-28 16:06:45

标签: mysql database database-design scalability

我通常将所有varchars设置为255以确保安全。它在磁盘空间或其他方面有什么不同吗?拥有更大的varchars / ints /其他领域是否有任何不足之处?

5 个答案:

答案 0 :(得分:5)

如果您允许255个字符,那么有人可能会使用255个字符。因此,每个报告和在线数据输入屏幕必须能够处理255个字符。凌乱。

我有一个现实世界的例子:在我们的系统中,有人决定部门名称可能是200个字符长。当有人投入相当长的价值时,它会搞砸几个HTML表单的布局,将其他字段从右侧推出并使其无法访问。所以需要一些补救工作......

答案 1 :(得分:4)

将更大的数据项加载到内存中需要更多的时间和更多的磁盘传输。为列定义较大的最大大小会增加表行的大小。对于许多DBMS服务器,表行是传输的项。因此,定义太胖的列会减慢速度。

VARCHAR项的效果很小。但VARCHAR比整数等数据类型慢得多。 8字节整数的传输时间是两个字节整数的四倍。因此,如果数据库的设计是为了获得最佳性能,那么将数据列限制在实际需要的范围内将会加快速度。这种影响的程度取决于磁盘通道是否是瓶颈。

另一个可能的瓶颈是将服务器与客户端连接起来的通道,通常是网络通道。通过不询问永不使用的数据的查询可以减少这个渠道的瓶颈,但这里只是在你需要数据和进行太多往返时才需要权衡。

在预期不断变化的需求时,在设计最佳性能和设计之间还需要权衡。

答案 2 :(得分:3)

不,这不会影响任何磁盘空间。如果您选择任何列为varchar,其长度可变,范围为0到65535.如果您将其声明为255或65535,则它们都是相同的。

如果你只需要255个字符,你应该将它们声明为char,这样如果你的表中没有可变长度列,你的查询就会很快。

答案 3 :(得分:1)

随着磁盘空间一样便宜,我倾向于不像多年前那样担心这个问题。但是,在VLDB中,很少有东西加起来。

答案 4 :(得分:0)

这可能会提供见解:

What are the optimum varchar sizes for MySQL?