我应该选择可能的最小数据类型,或者如果我存储值1,那么col数据类型是什么并且值将占用相同的内存大小无关紧要?
问题也是,因为我总是要转换它并在应用程序中玩。
更新
我认为varchar(1)和varchar(50)是相同的内存大小,如果值是“a”,我认为它与int和tinyint相同,根据我理解的答案不是,是吗? / p>
答案 0 :(得分:4)
始终选择可能的最小数据类型。 SQL无法猜测您想要的最大值,但是一旦您告诉它数据类型,它就可以优化存储和性能。
要回答您的更新:
varchar
确实只占用了你使用的空间,所以当你说字符“a”占用1个字节(拉丁语编码)时,无论你有多大{{}},你都是对的。 1}}你选择的字段。对于SQL中的任何其他类型的字段,情况并非如此。
但是,如果您将所有内容都设置为varchar字段,则可能会牺牲空间效率。如果所有内容都是固定大小的字段,则SQL可以执行简单的常量乘法来查找您的值(如数组)。如果你有varchar字段,那么找出数据存储位置的唯一方法就是遍历所有以前的字段(如链表)。
如果您正在开始使用SQL,那么我建议您远离varchar字段,除非您希望字段有时包含非常少量的文本,有时还会包含大量文本(如博客文章)。知道何时使用可变长度字段以达到最佳效果需要经验,即使我大部分时间都不知道。
答案 1 :(得分:4)
这是系统设计特有的性能考虑因素。通常,您可以在Sql Server数据页面中放入的数据越多,性能就越好。
Sql Server中的一个页面是8k。使用微小的整数而不是整数将使您能够将更多数据放入单个页面,但您必须考虑它是否值得。如果你打算每分钟提供数千次点击,那么是的。如果这是一个爱好项目或只有几十个用户会看到的东西,那就无所谓了。
答案 2 :(得分:0)
优势在于但除非你有很多行并且执行操作失败,否则可能不会很重要。将有性能改进和更小的存储。
答案 3 :(得分:0)
传统上页面大小上保存的每一位都意味着一点点速度提升:较窄的行意味着每页更多行,这意味着更少的内存消耗和更少的IO请求,从而提高速度。但是,随着SQL Server 2008 Page compression,事情开始变得模糊。压缩算法可以压缩4字节的整数,其值小于255,甚至小于一个字节。
Row compression算法将在一个字节上存储一个4字节的int,用于127以下的值(int是有符号的),对于32768以下的值,则为2个字节,依此类推。
但是,鉴于良好的压缩功能仅在Enterprise Edition服务器上可用,因此保持使用尽可能小的数据类型的习惯是有意义的。