BIGINT 有符号 vs 无符号

问题描述 投票:0回答:2

我的生产环境有 6 GB

MySQL InnoDB
表,其中有一些
BIGINT SIGNED
列,但存储的值都大于
0
,并且将来没有机会填充负值。如果我将它们全部或部分转换为
UNSIGNED
,性能会明显提高吗?转换过程中桌子是否有可能被压坏?

mysql database-performance sqldatatypes
2个回答
4
投票

这一点对你来说真的很重要吗?性能通常归结为您正在操作的数据的基本类型(例如

VARCHAR
INT
),而不是符号位。正如
VARCHAR(20)
VARCHAR(21)
的性能基本相同,我相信您很难找到 BIGINT
UNSIGNED BIGINT
之间的
可测量的
性能差异。

由于

BIGINT
可以存储天文数字般的巨大值,因此您不太可能需要最后一点。
INT
可以溢出 21 亿,一些应用程序预计会超过这个数字。推文数量超过 20 亿条,Facebook 帖子数量超过 20 亿条,等等,但大多数应用程序很少会看到超出的数量。

不要担心无法衡量的问题。如果您认为存在问题,请测量它。如果您的测量结果不确定,您可以使用不同的方法重试,或者接受您的直觉可能是错误的事实。

如今计算机的速度快得离谱,一些系统可以将数据库转储到内存中并在五秒内扫描它。如果您关心每一纳秒,那么首先要从容易实现的目标开始,例如您的索引策略或您选择的文件系统、您的 MySQL 配置。


0
投票

有符号的 BigInt 范围是 -9223372036854775808 到 9223372036854775807。
无符号 BigInt 范围为 0 到 18446744073709551615。
例如,我们使用无符号 BigInt 来表示“id”,因为“id”始终为正数(而不是负数)。

© www.soinside.com 2019 - 2024. All rights reserved.