mysql - 为什么只有唯一/主键必须具有分区表的分区表达式中使用的所有列

标签 mysql

根据 mysql 解释“分区表的分区表达式中使用的所有列必须是表可能具有的每个唯一键的一部分”。为什么只有唯一/主键,为什么其他键也没有?

最佳答案

我假设您所说的非唯一键是指索引。

假设您有一个作为平衡树的键,这里是 B 树,您按特定标准对其进行分区,以获得所需数量的分区,或每个分区中所需数量的成员。如果这样做,因为树是唯一键树,所以您将实际数据划分为大小几乎平衡的分区。

现在假设您有一个索引值的 B 树(例如 secondary index in InnoDB),并且树的每个键都指向表的多个数据成员。在这种情况下,根据B树进行分区并不意味着将数据划分成平衡的 block ,因此没有必要考虑它。

另一方面,在实践中,至少根据我自己的经验,主键和唯一键是一个设计问题,您在设计表时通常必须回答这个问题,这与有时您添加到表以提高恰好经常执行的查询的性能。如果您在所有键和索引中添加分区字段的约束,对于分区字段中没有字段的每个索引,您将不得不从分区中删除该字段或将分区字段的所有字段添加为默认为所有索引。因此,这不是一个好的做法。

关于mysql - 为什么只有唯一/主键必须具有分区表的分区表达式中使用的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933328/

相关文章:

php - jQuery 脚本中途卡住

mysql - 如何在我的数据库中的字符上存储重音符号

限制来自一个表的行的 SQL 查询,而不是结果集

sql - IF SQL 从 MySQL 到 PostgreSQL 的转换

php - 需要帮助将图像上传到php

mysql - 从 mysql 选择具有引用 id 的行到同一表

MySQL使用不同的键获取相同的参数

使用Web服务更新mysql数据库

php - 如何连接这3种编程语言?

php - 为什么 Propel 不保存这个查询,也不给出任何错误?