当我知道该值不会超过 255 时,设置tinyint 字段是否有优势?

Shi*_*mmy 3 sql sql-server int tinyint sqldatatypes

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

问题还在于,因为我总是必须转换它并在应用程序中使用。


更新

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

Kai*_*Kai 5

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


回答您的更新:

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

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

如果您刚开始使用 SQL,那么我建议您远离 varchar 字段,除非您期望字段有时包含非常少量的文本,有时包含非常大量的文本(例如博客文章)。需要经验才能知道何时使用可变长度字段才能达到最佳效果,即使我大多数时候也不知道。

  • varchar 占用“length + 1”字节(例如:“a”= 2 字节)。额外的字节是告诉数据库数据实际有多长。 (2认同)