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

标签 sql sql-server int sqldatatypes tinyint

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

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


更新

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

最佳答案

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


回答您的更新:

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

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

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

关于sql - 当我知道值不会超过 255 时,设置 tinyint 字段是否有优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1628551/

相关文章:

sql - 如何从 SQL Server 中的 SELECT 进行更新?

sql-server - 数据库索引 : Only selects!

sql-server - SQL Server,如果满足条件如何删除列?

c - 错误 : format %d expects type int, 但参数 2 的类型为 double(*)(int, int)

c++ - 用 int 值初始化 vector <char>

sql - MySQL 评级系统 - 查找评级

mysql - 如何使用由同一用户和多个用户插入的 MySQL 显示唯一数据?

sql - 数据库设计: please help me to understand relationship types

c# - 意外的本地路径作为来自远程服务器的异常消息的一部分

string - 批处理 : Handle numbers above 2^32