我的表中有一些字段是字符串,目前,大多数字段大小都有很高的字符限制。例如,街道名称为100个字符。使用大字段大小会受到惩罚吗?例如,如果我将此字段的限制更改为30个字符,那么尺寸会有所提高还是效率?大约有50个领域可能会缩小。
感谢您的建议。
我的表中有一些字段是字符串,目前,大多数字段大小都有很高的字符限制。例如,街道名称为100个字符。使用大字段大小会受到惩罚吗?例如,如果我将此字段的限制更改为30个字符,那么尺寸会有所提高还是效率?大约有50个领域可能会缩小。
感谢您的建议。
Answers:
如果你在谈论varchar
和nvarchar
则没有,也没有罚则,以允许更高的字段长度。
但是,需要注意一些注意事项:
CHAR
。 Varchar(2)
例如,实际上每行使用2-4个字节,而CHAR(2)
总是使用2。如果您的意思是“声明字段大小大于实际存储的任何值是否会受到惩罚?”,那么只要将其声明为varchar,答案是否定的。我所知道的每个SQL DB引擎仅存储数据中实际给定的字符数(加上长度值)。因此,如果将字段定义为varchar(100)但仅在其中存储10个字符,则它将仅在磁盘上占用10个字符(长度加上2个字节左右)。如有疑问,我通常会将varchar字段设置得非常大。
如果您的意思是“存储长字符字段是否会受到惩罚”,答案是肯定的。今天的磁盘空间很便宜,但它不是免费的,因此您不想无故浪费它。可能更重要的是,从磁盘读取数据需要时间,因此数据字段越长,程序变得越慢。如果对该字段进行了索引,这实际上会减慢您的检索速度,因为每次读取都必须将键值与此长字段进行比较。
请记住,如果给用户一个大数据输入字段,他们迟早会使用它。
话虽这么说,我会错在太大而不是太小的一边。磁盘空间足够便宜,您不希望强迫用户即时创建缩写,因为它们无法将实际数据放入可用字段中。我今天使用的系统的产品说明字段对于我们产品的许多真实名称来说太小了,因此用户必须缩写。当然,每个用户的缩写都不同,因此我们用二十种不同的方式来表达同一件事。