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

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


<强>更新

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

有帮助吗?

解决方案

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


要回答您的更新:

varchar 确实只占用你使用的空间,所以当你说字符“a”时,你就是对的。无论你选择多大的 varchar 字段,都会占用1个字节(拉丁语编码)。对于SQL中的任何其他类型的字段,情况并非如此。

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

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

其他提示

这是系统设计特有的性能考虑因素。通常,您可以在Sql Server数据页面中放入的数据越多,性能就越好。

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

优势在于但除非你有很多行并且执行操作失败,否则可能不会很重要。将有性能改进和更小的存储。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top