贝利信息

SQL数据库数据类型选择_intbigint性能对比

日期:2026-01-05 00:00 / 作者:舞夢輝影
选INT还是BIGINT取决于数据范围和存储开销,需按业务增长预留30%~50%余量:INT适用中小系统(上限21亿),超大规模、时间戳(2038年后)、高频计数等场景必须用BIGINT;升级需考虑DDL阻塞与生态兼容。

INT 还是 BIGINT,关键看数据范围和存储开销,不是越大越好。

数据范围决定是否必须用 BIGINT

INT(通常为 4 字节有符号整数)支持范围是 -2,147,483,648 到 2,147,483,647;BIGINT(8 字节)支持 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。如果主键是自增 ID,且预计总量会超过 21 亿条,比如日志表、订单流水、用户行为埋点等高频写入场景,就必须用 BIGINT,否则会溢出报错或回绕。

存储与性能差异真实存在但常被高估

每行多占 4 字节,在百万级表中增加约 0.4MB 存储;在十亿级大表中则多出约 4GB。内存占用、缓冲区效率、网络传输量也会随之略升。索引方面,BIGINT 索引页能存的键值更少,可能导致 B+ 树层级略深,查询时 I/O 次数微增 —— 但现代硬件下,单次查询差异通常在纳秒到微秒级,业务层几乎不可感。

兼容性与演进成本容易被忽略

INT 升级到 BIGINT 是 DDL 阻塞操作,MySQL 5.6+ 支持在线 DDL,但仍需锁表短时间;PostgreSQL 需重写表。如果业务已上线多年,主键类型变更还牵扯应用层 ORM 映射、接口协议、前端展示逻辑(比如 JS Number 最大安全整数是 2⁵³−1,超此范围需用字符串传 BIGINT ID),风险不小。

其他常见误区提醒

有人认为 “反正磁盘便宜,一律用 BIGINT 更省心”,这忽略了索引膨胀和生态适配问题;也有人坚持 “能用 INT 绝不用 BIGINT”,却在用户 ID 字段上硬扛,结果两年后被迫停服做数据迁移。理性做法是:以业务生命周期和增长模型为依据,留 30%~50% 余量,再选最紧凑且够用的类型。