【发布时间】:2014-02-10 18:13:44
【问题描述】:
有一个表包含比真实数据数据更多的id数据。
user_id int unsigned NOT NULL,
project_id int unsigned NOT NULL,
folder_id int unsigned NOT NULL,
file_id int unsigned NOT NULL,
data TEXT NOT NULL
为此表创建唯一主键的唯一方法是组合(user_id、project_id、folder_id、file_id)。我经常看到 2 列复合主键,但是有 4 个甚至更多就可以了吗?根据MySQL:“所有存储引擎都支持每张表至少16个索引,总索引长度至少256字节。大多数存储引擎都有更高的限制。”,所以我知道至少可以做到。
除此之外,还有针对这些 id 的各种组合的频繁查询。例如,查找用户 X 的所有项目,查找用户 X 的所有文件,查找项目 Y 和文件夹 Z 的所有文件等。每个 id 列上是否应该有单独的单独索引键,或者是否存在复合索引已经包含所有列的主键是否会使进一步的单个键变得多余?表中随时会有大约 1000 万到 5000 万行。
总结一下:是否可以有一个包含 4 个(或更多)id 列的复合主键,如果有一个复合键,是否会使这些列中的每一个的额外单独的键变得多余?
【问题讨论】:
-
据我所知,没有什么会让 n 列主键成为一个坏主意,只要它有助于保持数据规范化。除此之外,我将为
where条件最多的字段创建单独的索引。
标签: mysql innodb database-schema