我试图找出如果我将主键改为BIGINT(20),表的性能是否会降低.目前,我使用INT(7),大约有300.000 entries already with large IDs (7 or 8 digits)个.

现在我所有的身份证都有7位数,但我的客户想换成8位数.我将来无法轻松地更改软件,所以我考虑现在使用BIGINT(20)以防万一.即使我还不需要使用BIGINT,但使用BIGINT是否会降低性能?

有这方面经验的人对速度和性能有什么建议吗?

推荐答案

回答你的问题:是的,它的性能会降低.显然,类型越大,表越大,查询速度越慢(I/O越多,索引越大,访问时间越长,结果不太可能适合各种缓存,等等).因此,作为一条经验法则:总是使用适合你需要的smallest type个.

也就是说,performance doesn't matter.为什么?因为当你到达一个INT溢出的点时,BIGINT是唯一的解决方案,你必须接受它.此外,在这一点上(考虑到您使用的是自动增量PK,您将超过4billions行),您将有更大的性能问题,与INT相比,BIGINT的开销将是您最不关心的问题.

因此,考虑以下几点:

Mysql相关问答推荐

如何在MySQL中检索两列的值不同的行

如何合并有多行的json列

提高bash脚本从大型gml文件读取数据的效率

将 GORM 与自定义连接表和外键结合使用

mysqli 无法以非 root 用户身份连接

从 MySQL WordPress Select 最后一行

即使在某些表中不匹配,如何从 MySQL 中的多个表中 Select 所有记录

为什么 `count` 函数有效但 `sum` 无效?

从 R 脚本创建新的 MYSQL 数据库

使用 JOIN 计算列中的所有值

为什么 fetch 方法不能获取任何东西?(feat node.js,restAPI)

MySQL在定义表的位置后抛出错误

按长度过滤 varbinary 字段

从一个带有连接的表中删除

MySQL - 表'my_table'没有被锁定表锁定

MySQL ORDER BY rand(),名称为 ASC

在 MySQL 中的子查询上使用 GROUP_CONCAT

Python 是否支持 MySQL 准备好的语句?

如何使用 Java 更改数据库连接中的 MySQL 时区?

如何将 MySQL 数据库导出为 JSON?