我有生产环境,6GB的MySQL InnoDB表和一些BIGINT SIGNED列,但是存储的值都大于0,以后没有机会填充负值。如果我将它们全部或部分转换为UNSIGNED,性能会有明显的提高吗?在转换过程中,桌子会被压碎吗?
发布于 2017-11-30 07:30:31
这一点对你真的很重要吗?性能通常归结为您正在操作的基本数据类型(例如,VARCHAR和INT),而不是签名位。正如VARCHAR(20)和VARCHAR(21)的性能基本相同一样,我相信您很难在BIGINT和UNSIGNED BIGINT之间找到一个可测量的性能差异。
因为BIGINT可以存储巨大的价值,所以你不太可能需要最后一点。INT可以溢出21亿,一些应用程序预计会超过这个数字。有超过20亿的推特,超过20亿的Facebook帖子等等,但大多数应用程序很少会看到甚至超过这一点。
不要担心什么是你不能衡量的问题。如果你觉得有问题,就测量一下。如果你的测量结果不确定,你可以用另一种方法再试一次,或者接受这样一个事实:也许你的直觉是错误的。
这些天计算机速度惊人,有些系统可以将数据库转储到内存中,并在5秒内扫描。如果你关心每一个纳秒,首先要开始的是低挂果,比如你的索引策略或者你选择的文件系统,你的MySQL配置。
https://stackoverflow.com/questions/47567287
复制相似问题