【问题标题】:MySQL primary key column type for large tables大表的 MySQL 主键列类型
【发布时间】:2020-05-22 03:35:21
【问题描述】:

我正在使用相对较大的数据库表(700K 行)进行项目。

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

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

请帮我解决问题。

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

在数据库架构设计领域我应该更好地学习什么?

【问题讨论】:

    标签: mysql database database-design schema


    【解决方案1】:

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

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

    一个未签名的 INT 最多可以存储:

    4,294,967,295

    一个无符号的 BIGINT 最多可以存储:

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

    你不会很快就填满这个。

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

    【讨论】:

      【解决方案2】:

      我认为默认情况下任何主键都是无符号的。无论如何,对主键使用负数充其量是不受欢迎的,而且会破坏一些东西。

      【讨论】:

      • 您能说得更具体些吗? “破坏东西”非常模糊。它到底破坏了什么?
      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多