BIGINT签名vs UNSIGNED

时间:2017-11-30 06:37:07

标签: mysql database-performance sqldatatypes

我的生产环境有6 GB MySQL InnoDB个表,其中包含一些BIGINT SIGNED列,但存储的值都大于0,并且未来无法填充负值。如果将全部或部分转换为UNSIGNED,是否会有明显改善的性能?在转换过程中,表格是否有可能会崩溃?

1 个答案:

答案 0 :(得分:1)

这一点对你来说真的很重要吗?性能通常归结为您操纵的基本数据类型(例如VARCHARINT)而不是符号位。正如VARCHAR(20)VARCHAR(21)表现基本相同,我确定您很难在BIGINTUNSIGNED BIGINT之间找到可衡量的性能差异BIGINT

由于INT可以存储天文数字巨大的值,因此您不太可能需要最后一点。 for (int attempts = 1; attempts <= 3; attempts++); { Random dice = new Random(); for(int n = 0; n <QArray.length; n++) { System.out.println("Question" + (n+1)); System.out.println(QArray[n]); for(int m =0; m<3; m++) { String ans = scanner.nextLine(); int t = dice.nextInt(9) + 1; int scoremarks = 5; if (ans.equalsIgnoreCase(AArray[n])) { System.out.println("That is correct!\nYour score is:" + scoremarks + "\nWith virtual dice your total score is:" + (scoremarks +t)); break; } else { System.out.println("That is incorrect!\nYou got 0 Marks\nYour score is 0!"); } 可能会溢出21亿,预计有些应用程序会超过这个数字。有超过20亿的推文,超过20亿的Facebook帖子等等,但大多数应用程序很少会看到甚至超过。

不要担心自己可以衡量的问题。如果您认为存在问题,请衡量。如果您的测量结果不确定,您可以使用不同的方法再次尝试,或者让自己屈服于可能是您的直觉错误的事实。

这些天计算机的速度非常快,有些系统可能会将该数据库转储到内存中并在五秒钟内扫描一遍。如果您关注每一纳秒,首先要做的就是使用索引策略或您选择的文件系统,以及您的MySQL配置。