【发布时间】:2010-11-23 00:54:33
【问题描述】:
SQL Server 中数据类型的合适大小是多少?在定义列时,我将大小为 50 的数据类型视为默认大小之一(例如:nvarchar(50)、binary(50))。 50的意义何在?我很想使用 2 的幂的大小,这样更好还是没用?
更新 1 好的,谢谢你们的投入。我只是想知道为列定义数据类型大小的最佳方法。
【问题讨论】:
标签: sql-server database types
SQL Server 中数据类型的合适大小是多少?在定义列时,我将大小为 50 的数据类型视为默认大小之一(例如:nvarchar(50)、binary(50))。 50的意义何在?我很想使用 2 的幂的大小,这样更好还是没用?
更新 1 好的,谢谢你们的投入。我只是想知道为列定义数据类型大小的最佳方法。
【问题讨论】:
标签: sql-server database types
这么多字段长度为 50 的原因是 SQL Server 默认将 50 作为长度存在问题的大多数数据类型的长度。
如前所述,字段的长度应该适合存储在那里的数据,尤其是因为 SQL Server 中单个记录的长度有限制(大约为 8000 字节)。有可能突破这个限制。
此外,您的字段长度可以被视为您的文档的一部分。我不知道有多少次我遇到过懒惰的程序员,他们声称他们不需要文档,因为代码是自文档的,然后他们就懒得做那些会让代码自文档的事情了。
【讨论】:
您不会从使用 2 的幂中获得任何好处。只要您的业务需求确实需要它们,就可以创建字段 - 让 SQL Server 处理其余的。
此外,由于 SQL Server 页面大小限制为 8K(其中 8060 字节可用于用户数据),因此使您的可变长度字符串尽可能小(但从需求的角度来看,只要需要)是加。
8K 限制是固定的 SQL Server 系统设置,无法更改。
当然,如今的 SQL Server 可以使用所谓的“溢出”页面连续处理超过 8K 的数据 - 但效率较低,因此尝试保持在 8K 以内通常是个好主意。
马克
【讨论】:
在不留太多可用空间的情况下,将整行多次放入页面是个好主意。
一行不能跨越两页,一个页有8096字节的可用空间,所以两行每行占用4049字节将占用两页。
查看docs了解如何计算一行占用的空间。
还要注意VARCHAR 和VARBINARY 中的VAR 代表“变化”,因此如果您将1-byte 值放入50-byte 列中,它将占用1字节。
【讨论】:
为什么不是传统的 2 的幂,负 1,例如 255...
说真的,长度应该符合您的需要并且适合您的数据。
没有别的:客户端如何使用它,对齐到 32 位字边界,2 的幂,生日,天王星上升的天蝎座,掷骰子......
【讨论】:
没有理由为性能等使用 2 的幂。数据长度应由存储数据的大小决定。
【讨论】:
这完全取决于您存储的内容。 如果您需要 x 字符,请使用 x 而不是任意预定义的数量。
【讨论】:
字段的大小应该适合您计划在其中存储的数据,全局默认值不是一个好主意。
【讨论】: