Yaa*_*lis 5 database sql-server indexing database-design primary-key
我有一个例程,它将创建单独的表(Sql Server 2008)来存储我的应用程序生成的报告的结果(Asp.net 3.5).每个报告都需要自己的表,因为表的列会根据报告设置而有所不同.一个表将包含10-5,000行之间,很少超过10,000行.
以下使用规则适用:
知道这一点,是否有理由在表上创建PK索引列?这样做是否有助于以任何方式检索数据的性能,如果可以,这将超过插入数据时更新索引的额外负载(我知道10K记录的数量相对较少,但这个解决方案需要是能够扩展).
更新:以下是有关正在处理的数据的更多详细信息,这些信息将在每个报告的一个表的当前设计决策中进行:
我也怀疑有人声称每次报告运行时都必须创建一个新表.但是,考虑到每次运行报告时都可能需要不同的列(数量,名称和数据类型),我看不到一个很好的选择.
我能想到的另一件事是拥有一个ID列(标识ReportVersionID,对应于另一个表),ReferenceValues列(varchar字段,包含所有引用值,按指定顺序,由一些分隔符分隔)和NumericValues列(与ReferenceValues相同,但对于数字),然后当我检索结果时,将所有内容放入系统中的专用对象,根据定义的分隔符分隔值).这看起来更合适吗?
主键并不是任何和所有数据表都必须的。确实,它们通常非常有用,放弃它们是不明智的。然而,除了速度的主要任务(我同意这无疑会受到积极影响)之外,还有独特性。为此,并重视您已经明显采取的考虑,我建议主键的唯一需要是控制表的预期唯一性。
更新: 您在评论中提到,如果您进行 PK,它将包含目前不存在且不需要的 Identity 列。在这种情况下,我建议完全不要PK。正如@RedFilter 指出的,代理键永远不会添加任何值。