【发布时间】:2016-12-06 15:54:25
【问题描述】:
我有一个事务表:
|rowID|value1|value2|...|
|11111|12 |34 |...|
|11112|23 |123 |...|
|11113|99 |53 |...|
...
RowID 是标识,递增 1。索引也没有问题。许多新值被插入,更新发生,有时某些行可能会被删除。
但现在我有第二张桌子:
|rowID|flag1|flag2|...|
|11113|0 |1 |...|
|11111|1 |1 |...|
|11112|0 |1 |...|
...
这是一个用户操作,它将事务表中的行插入到第二个表中。 RowID 对应事务表中的RowID。
对第二个表的插入不按RowID 排序。较高的RowID 可能比较低的RowID 插入得更早。
这种表的最佳索引策略是什么?
- 将第二个表中的
RowID定义为主键,从而产生聚集索引是否明智?我认为这并不理想,因为RowID没有排序。 - 没有主键,但有合适的非聚集索引会更好吗?
我想知道对于这样的表(第二个表)是否有一些一般性的建议?
【问题讨论】:
-
你应该(几乎)总是在你的表上有一个主键。很少有堆是正确的方法。此外,如果您不希望 RowID 成为聚集索引,则没有规定主键必须是聚集索引。它只是创建主键时的默认设置。如果设计和数据允许,您可以将其指定为非聚集索引并添加不同的聚集索引。
标签: sql-server indexing primary-key