【发布时间】:2014-02-27 11:16:18
【问题描述】:
首先,我了解主键在 SQL 表或任何数据库中的作用。
但是,当涉及到用户定义的表类型时,我发现自己无法理解为什么要创建主键。根据我的经验,我没有发现它们对性能有任何好处,但我怀疑我的发现可能来自我对它们的一般用法和有限的经验,而不是更有经验的观点。
例如,我通常将表值参数用于插入/更新过程,或者传递用于创建选择查询的值数组。我没有发现它们对性能有任何好处,而且如果有什么我经历过的小幅性能下降(但我们说的是最多 10 毫秒,所以它可以忽略不计)。
我应该透露,其中传递的任何数据都已被非常小心地清理/排序,因此我可能没有看到任何好处,但我无法轻易知道。
因此,问题又是,我应该在我的用户定义表类型上有一个主键,还是它只是不那么重要?
抱歉,如果这是重复的。我进行了大量搜索,但我可能使用了错误的关键字组合。
我们将一如既往地感谢您的见解。
【问题讨论】:
-
您的性能下降很小,因为必须构建聚集索引。如果数据是预先排序的,并且您不会对数据执行选择性查询,那么索引只是浪费资源。如果您不想对集合施加新顺序或重复调用集合上的一些选择性查询,这将受益于索引,并且如果集合足够大,那么值得创建聚集索引和可能的其他非成簇的缺陷。
-
@Jodrell,谢谢,这很有意义。出于某种疯狂的原因,我没有考虑构建聚集索引的开销!!!很高兴知道我对预购数据的假设是准确的。
标签: database sql-server-2012 table-valued-parameters