我有下表,其中包含大量数据,这就是我要拆分或分区它的原因。问题是我想按不是主键的列进行分区:project_id。在我的例子中,最多会有 2 或 3 个不同的项目 ID...
- id (PRIMARY KEY, AUTO INCREMENT)
- project_id (INT)
- username (UNIQUE)
- username_md5 (UNIQUE)
(- ... more but irrelevant columns)
如您所见,我需要保证 3 列是唯一的(id、用户名、username_md5)。 现在,我想对 project_id 列进行 RANGE 分区。 我想出的唯一解决方案是为所有这些列制作一个丑陋的 4 列主键(分区要求分区表达式中的所有列必须是每个唯一键的一部分)。
现在,我想知道
A) 是一个 4 列的主键吗?
B) 我的分区有更好的解决方案吗?
C) 否则我会通过为我拥有的每个 project_id 创建一个“动态”表来手动完成,这可能是最简单的解决方案吗?
最佳答案
您可以删除您的primary/unique key,并使其成为一个简单的key,而不是对project_id 做一个简单的范围分区,现在它根本不需要是key
您仍然可以快速访问,因为这些字段已编入索引。
您可能仍想保持唯一性:
- 在应用层做
- 使用带选择的嵌套插入
- 您可以使用添加了唯一约束的附加表(仅组合),保留对表中组合的引用
关于Mysql:没有主键的分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268116/