gpt4 book ai didi

mysql - 更好的 PK 用于 future 安全的数据密集型数据库

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:31 26 4
gpt4 key购买 nike

我们在为新的数据密集型项目设计主键时遇到了技术难题。

请向我们解释哪种 PK 设计更适合我们的数据密集型数据库。

  1. 数据库是数据密集型和持久性的。
  2. 每秒至少有 3000 个用户访问它。

请从技术上告诉我们哪种类型的 PK 更适合我们的数据库,并且这些表将来更改的可能性较小。

1.INT/BIGINT自增列作为PK

2.复合键。

3.唯一的varchar PK。

最佳答案

我会选择选项 1,使用 BIGINT 自动增量列作为 PK。原因很简单,每次写都会写到当前页的末尾,意味着插入新行非常快。如果你使用组合键,那么你需要一个顺序,除非你是按照组合键的顺序插入,否则你需要分页插入,例如想象一下这张表:

 A | B | C
---+---+---
1 | 1 | 4
1 | 4 | 5
5 | 1 | 2

其中主键是(A, B, C)上的复合键,假设我要插入(2, 2, 2),则需要插入如下:

 A | B | C
---+---+---
1 | 1 | 4
1 | 4 | 5
2 | 2 | 2 <----
5 | 1 | 2

这样聚簇键保持其顺序。如果您已经插入的页面也已经满了,那么 MySQL 将需要拆分该页面,将一些数据移动到新页面以为新数据腾出空间。这些页面拆分的成本非常高,因此除非您知道要插入顺序数据,否则使用自动增量列作为聚类键意味着除非您弄乱了增量,否则您永远不必拆分页面。

您仍然可以向将作为主键的列添加一个唯一索引以保持完整性,您仍然会遇到与索引拆分相同的问题,但是由于索引会比聚集索引窄,因此拆​​分会由于更多数据将适合页面,因此频率较低。

或多或少相同的论点适用于唯一的 varchar 列,除非你有某种过程确保 varchar 是连续的,但生成连续的 varchar 比自动增量列的成本更高,我看不出直接的优势.

关于mysql - 更好的 PK 用于 future 安全的数据密集型数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741085/

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