2016-12-06 115 views
0

我有一个交易表:SQL索引标识列排序顺序

|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没有排序。
  • 没有主键,但是合适的非聚集索引更好吗?

我不知道是否有这样的表(第二张表)的一般建议?

+1

你应该(几乎)总是在你的表上有一个主键。有很多时候堆是正确的方法。此外,如果您不希望RowID成为聚集索引,则没有规定主键必须是聚集索引。这只是创建主键时的默认值。您可以将其指定为非聚簇,并在设计和数据保证时添加不同的聚簇索引。 –

回答

0

表格不是有序数据集。事实上RowID不是在第二个表上的顺序在定义PK /索引时没有关系。

你应该让RowIDPKTable2索引创建B-TREE还创建的时刻,将数据存储在那里最快的访问。