2

我应该选择尽可能小的数据类型,或者如果我存储值 1,那么 col 数据类型是什么并不重要,并且该值将占用相同的内存大小?

问题也是,因为我总是必须转换它并在应用程序中玩耍。


更新

如果值为“a”,我认为 varchar(1) 和 varchar(50) 的内存大小相同,我认为 int 和 tinyint 相同,根据我理解的答案,它不是,是吗?

4

4 回答 4

4

始终选择尽可能小的数据类型。SQL 无法猜测您想要的最大值是多少,但是一旦您告诉它数据类型,它就可以优化存储和性能。


要回答您的更新:

varchar确实只占用您使用的空间,所以当您说字符“a”将占用 1 个字节(在拉丁编码中)时,无论varchar您选择多大的字段,您都是对的。SQL 中的任何其他类型的字段都不是这种情况。

但是,如果将所有内容都设为 varchar 字段,则可能会牺牲空间效率。如果一切都是固定大小的字段,那么 SQL 可以进行简单的常数时间乘法来找到您的值(如数组)。如果那里有 varchar 字段,那么找出数据存储位置的唯一方法是遍历所有先前的字段(如链表)。

如果您开始使用 SQL,那么我建议您不要使用 varchar 字段,除非您希望字段有时包含非常少量的文本,有时包含大量的文本(例如博客文章)。知道何时使用可变长度字段以达到最佳效果需要经验,即使我大部分时间都不知道。

于 2009-10-27T03:05:32.663 回答
4

这是系统设计特有的性能考虑。一般来说,一页 Sql Server 数据中可以容纳的数据越多,性能就越好。

Sql Server 中的一页为 8k。使用小整数而不是整数将使您能够将更多数据放入单个页面,但您必须考虑是否值得。如果您要每分钟提供数千次点击,那么是的。如果这是一个爱好项目或只有几十个用户会看到的东西,那没关系。

于 2009-10-27T03:08:03.827 回答
0

传统上,在页面大小上节省的每一位都意味着一点速度的提高:更窄的行意味着每页有更多的行,这意味着更少的内存消耗和更少的 IO 请求,从而提高了速度。但是,随着 SQL Server 2008页面压缩,事情开始变得模糊。压缩算法可以压缩 4 字节整数,其值低于 255,甚至小于一个字节。

行压缩算法将在单个字节上存储 4 字节 int,用于 127 以下的值(int 有符号),2 字节用于 32768 以下的值,依此类推。

但是,鉴于良好的压缩功能仅在企业版服务器上可用,因此保持使用尽可能小的数据类型的习惯是有意义的。

于 2009-10-27T03:54:21.427 回答
0

优势是存在的,但可能并不显着,除非您有很多行并且执行丢失操作。将有性能改进和更小的存储空间。

于 2009-10-27T03:07:05.027 回答