【问题标题】:Should Data types be sizes of powers of 2 in SQL Server?SQL Server 中的数据类型应该是 2 的幂吗?
【发布时间】:2010-11-23 00:54:33
【问题描述】:

SQL Server 中数据类型的合适大小是多少?在定义列时,我将大小为 50 的数据类型视为默认大小之一(例如:nvarchar(50)、binary(50))。 50的意义何在?我很想使用 2 的幂的大小,这样更好还是没用?

更新 1 好的,谢谢你们的投入。我只是想知道为列定义数据类型大小的最佳方法。

【问题讨论】:

    标签: sql-server database types


    【解决方案1】:

    这么多字段长度为 50 的原因是 SQL Server 默认将 50 作为长度存在问题的大多数数据类型的长度。

    如前所述,字段的长度应该适合存储在那里的数据,尤其是因为 SQL Server 中单个记录的长度有限制(大约为 8000 字节)。有可能突破这个限制。

    此外,您的字段长度可以被视为您的文档的一部分。我不知道有多少次我遇到过懒惰的程序员,他们声称他们不需要文档,因为代码是自文档的,然后他们就懒得做那些会让代码自文档的事情了。

    【讨论】:

      【解决方案2】:

      您不会从使用 2 的幂中获得任何好处。只要您的业务需求确实需要它们,就可以创建字段 - 让 SQL Server 处理其余的。

      此外,由于 SQL Server 页面大小限制为 8K(其中 8060 字节可用于用户数据),因此使您的可变长度字符串尽可能小(但从需求的角度来看,只要需要)是加。

      8K 限制是固定的 SQL Server 系统设置,无法更改。

      当然,如今的 SQL Server 可以使用所谓的“溢出”页面连续处理超过 8K 的数据 - 但效率较低,因此尝试保持在 8K 以内通常是个好主意。

      马克

      【讨论】:

        【解决方案3】:

        在不留太多可用空间的情况下,将整行多次放入页面是个好主意。

        一行不能跨越两页,一个页有8096字节的可用空间,所以两行每行占用4049字节将占用两页。

        查看docs了解如何计算一行占用的空间。

        还要注意VARCHARVARBINARY 中的VAR 代表“变化”,因此如果您将1-byte 值放入50-byte 列中,它将占用1字节。

        【讨论】:

          【解决方案4】:

          为什么不是传统的 2 的幂,负 1,例如 255...

          说真的,长度应该符合您的需要并且适合您的数据。

          没有别的:客户端如何使用它,对齐到 32 位字边界,2 的幂,生日,天王星上升的天蝎座,掷骰子......

          【讨论】:

            【解决方案5】:

            没有理由为性能等使用 2 的幂。数据长度应由存储数据的大小决定。

            【讨论】:

              【解决方案6】:

              这完全取决于您存储的内容。 如果您需要 x 字符,请使用 x 而不是任意预定义的数量。

              【讨论】:

                【解决方案7】:

                字段的大小应该适合您计划在其中存储的数据,全局默认值不是一个好主意。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-02
                  • 2021-06-06
                  • 2012-02-13
                  • 2011-04-23
                  • 2010-10-09
                  相关资源
                  最近更新 更多