1,2,3...等。它们是数字。所以我使用 integer -6ren">
gpt4 book ai didi

database - 使用主键值字符 "1"而不是 int 值 1

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:16 28 4
gpt4 key购买 nike

嗯,我对数据库架构了解不多,但我真的不明白CTO的想法,但他坚持使用字符作为我们使用的所有表的主键的列类型。但是主键看起来仍然像这样 -> 1,2,3...等。它们是数字。所以我使用 integer + auto_increment 来合成 PK

但是 CTO 说这很糟糕,因为他不能在 PK 上使用 LIKE 条件发出查询?!

  1. 使用字符进行 PK 是否可以,尤其是当您的 PK 是数字时?
  2. 在PK上使用like condition是否正确?

PS - 所以不是自动递增/触发,序列 CTO 发出选择查询获取表中的最大值,他加 1,然后将该值转换为字符串然后存储它。

编辑
感谢您的帮助 !但我需要让他相信这将是一场灾难。我只被告知这(在这种情况下字符 4 PK)是个坏主意。他的论点是……
1.角色PK不会占用太多空间。
2. 如果您使用 int 类型 PK,数据库查询优化器将不得不重新读取您的查询因为你必须发出像
这样的东西“从名字像'somename'的员工中选择*

从 id = 6 的员工中选择 *
因为 where 子句改变了。
他强烈主张我们使用的是
“从@columnName 喜欢@value 的员工中选择*”
他说这样,查询优化器会运行得更好。

我如何证明或给他一些正当理由让他改变主意?

谢谢你:)

最佳答案

您的 CTO 做出错误决定的原因有很多;让我介绍一些:

  1. 正如您所注意到的,您必须采取额外的步骤来生成新的自动递增 PRIMARY KEY。这是一种计算成本,而且还会增加它在未来某个时间点应用不一致的可能性。

  2. 一旦超过 4 个字符,字符将占用更多磁盘空间(换句话说,12345 比“12345”的存储成本低得多)。

  3. 如果您在主键上使用聚集索引(这是某些 RDBM 的默认设置),则字符排序与整数排序完全不同:

字符:1、10、101、11、12、13、14、15...数字:1,2,3,4...

如果您将最大数值作为字符插入,那么您就是在粉碎索引。不是无法克服的问题,而是更多浪费的计算能力需要清理。

至于你关于在 PRiMARY KEY 上使用 LIKE 的第二个问题,我想不出你会这样做的原因;如果您需要 LIKE 的功能,通常是因为您已经为用作 PRIMARY KEY 的列分配了某种重要性,这意味着您需要将其公开给最终用户。如果是这种情况,那么我会使用代理自动递增数字主键,并向用户公开某种形式的 ID。

关于database - 使用主键值字符 "1"而不是 int 值 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189306/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com