Mysql:没有主键的分区

标签 mysql partitioning

我有下表,其中包含大量数据,这就是我要拆分或分区它的原因。问题是我想按不是主键的列进行分区: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/

相关文章:

ruby-on-rails - 一个 Rails 应用程序可以使用多个 Redis 实例吗?

php - 使用 MySQL 和 PHP 存储图像位置

php - 上传 CSV 或 XML 进行编辑和返回

PHP我无法删除上传的文件

sql - Hive SQL - 如何从每个人中删除最大(日期)?

apache-spark - JDBC 到 Spark Dataframe - 如何确保均匀分区?

java - SQLException : ResultSet is from UPDATE. 无数据。 Spring 数据

mysql - 选择具有最新时间戳的记录

mysql - 如何更改 mysql innodb 分区以使用另一个 key ?

hadoop - hive/hdfs 移动数据未按预期工作