【问题标题】:SQL Index Identity Column Sort OrderSQL 索引标识列排序顺序
【发布时间】: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


【解决方案1】:

表不是有序数据集。事实上RowID 不是第二张表上的顺序在定义 PK/index 时并不重要。

您应该将RowID 设为PK for Table2 在创建索引的那一刻,还会创建一个B-TREE,并将数据存储在那里以实现最快的访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多