大型表的 MySQL 主键列类型

标签 mysql database database-design schema

我正在处理具有相对较大数据库表(700K 行)的项目。

我在设计数据库模式时犯了一个错误。 当行增加时,我不得不增加 ID 的列类型 bigint(x)。

现在是 bigint(44)。 我害怕设置高 x 值,因为我认为它会显着降低性能。也许我错了..

请帮我解决这个问题。

我可以一次设置什么列类型而忘记这个问题?

在DB schema设计方面我应该学什么?

最佳答案

当您将列创建为 BIGINT(44) 时,“44”是显示宽度 - 它不会影响您可以存储的值的范围或检索它们的速度。

对于自动递增的 ID,您希望使用 UNSIGNED 数字,例如BIGINT(44) 无符号。这将使值的范围加倍并添加额外的约束,这通常是一件好事。

一个无符号的 INT 将存储到:

4,294,967,295

未签名的 BIGINT 最多可存储:

18,446,744,073,709,551,615

你不会很快填满它。

您没有说您的最大 ID 增长的速度有多快 - 如果您没有插入很多行,那么您应该坚持使用 UNSIGNED INT,因为它占用的空间更少。

关于大型表的 MySQL 主键列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816646/

相关文章:

mysql - 建立图书网站,使用什么 API 以及在数据库中存储什么?

MYSQL 外键删除和更新

php - 如何保存用户的过滤条件?

java - 从mysql中的多行中获取单列

mysql - 协助数据库设计

database - 我应该为每张专辑制作单独的表格吗?

mysql SUM 查询没有给出预期的结果

php - 对 MySQL session /用户的文件权限

java - 如何为 MPAndroidChart 添加数据

python - Django应用程序的数据库设计