【发布时间】:2015-03-09 11:08:58
【问题描述】:
我的数据库中有一个大表(50 列,可能达到 100,000,000 行)。 现在我的主键是 8 列。
最好做1个主键(自动编号)并添加列唯一约束?
【问题讨论】:
-
听起来你的表是标准化的重要候选者。也就是说,你的问题有点模糊。更多细节将有助于获得好的答案
标签: sql sql-server
我的数据库中有一个大表(50 列,可能达到 100,000,000 行)。 现在我的主键是 8 列。
最好做1个主键(自动编号)并添加列唯一约束?
【问题讨论】:
标签: sql sql-server
数据库的结构应该由数据的使用方式决定。例如,可以判断结构是规范化的还是非规范化的。但是这些方法中的每一种都适用于不同的情况。
也就是说,我非常倾向于在所有表中都有一个自动递增(“身份”)主键。这在许多情况下都是有益的。以下是三个原因:
但是,这样的列会占用更多的存储空间。而且,单个主键索引比具有多个索引更有效(在空间方面)。
这不是对您问题的直接回答,但它至少为您提供了一些思考问题的参数。
【讨论】:
通常当您不了解时,最好遵循数据库设计中的标准指南。因为它们适用于绝大多数情况,而且出错的可能性较小。
在这种情况下,这意味着您非常可能会从使用自动递增的 ID 列作为聚集主键索引中受益。以及向所有引用列添加外键和非聚集索引,以防您尚未这样做。
最后,您甚至可以考虑添加一些专门为最慢查询设计的自定义(甚至多列)索引...基本上,如果您有一些问题查询,您希望在其 WHERE 子句中对列进行索引。
除此之外,您当然应该查看表和数据库是否已正常化。要了解规范化,最好用谷歌搜索。这不是一个复杂或困难的概念,但有上千个教程比我们这里更适合解释这个概念。
通过这样做,您很可能会朝着正确的方向前进。如果它不起作用,那么这里的人们可以使用更多信息来确定最佳替代方案。
【讨论】: