Rih*_*iho 48 mysql database-design
我想知道在MySQL中定义一些整数字段时使用UNSIGNED标志会有什么积极影响吗?它是否使查询更快或数据库更小?或者,如果我担心上限,我应该只打扰它吗?
Kev*_*ney 55
根据MySQL 5.1手册的10.2节:
在非严格模式下,当将超出范围的值分配给整数列时,MySQL会存储表示列数据类型范围的相应端点的值.如果将256存储到TINYINT或TINYINT UNSIGNED列中,MySQL将分别存储127或255.当浮点或定点列分配超过由指定(或默认)隐含的范围精度和标度的MySQL存储表示该范围的相应的端点的值.
因此,只有在关注上限时才使用UNSIGNED.同时添加UNSIGNED不会影响列的大小,只是表示数字的表示方式.
Geo*_*F67 24
除非你试图从价值中获得最大的收益并且不需要负值,否则无关紧要.
例如,假设你想存储0-255.
您可以使用tinyint,但仅当您将其用作未签名时才使用.
我见过很多数据库,人们不打算像这样优化并最终得到一些相当大的表,因为他们只是一直使用INT.
不过,如果你在讨论int vs unsigned int,那么根本就没有性能影响或空间效应.
从标准的角度来看,我总是使用无符号,只有当我知道我需要负值时才使用签名.
小智 19
在性能或存储方面,它绝对是一回事.
作为一般规则,请使用更适合您的方法:如果您只需要正值,则将值存储为UNSIGNED,否则,将其设为默认值[SIGNED].
为PRIMARY AUTOINCREMENT列设置SIGNED值时会出现一个问题:自动生成的数字的计数从1开始(不是最小的负数),可能的值将提前结束,因为您将只使用一半的值.因此,在这种情况下(PRIMARY + AUTOINCREMENT列),最好存储为UNSIGNED.
小智 5
它将提高性能,假设您要搜索数量 < 50o。
\n\n没有 \xe2\x80\x9cunsigned\xe2\x80\x9d:\n处理流程,由于数量字段是 \xe2\x80\x9cint\xe2\x80\x9d 并且你有这个字段的索引,MySQL 将定义范围如-2147483648到500,它将根据这个范围得到结果。
\n\n对于 \xe2\x80\x9cunsigned\xe2\x80\x9d:\n处理流程,因为数量字段是 \xe2\x80\x9cint\xe2\x80\x9d,其中 \xe2\x80\x9cunsigned\xe2\x80\x9d 和你有这个字段的索引,MySQL会定义范围为0到500,并根据这个范围得到结果。
\n| 归档时间: | 
 | 
| 查看次数: | 47692 次 | 
| 最近记录: |