2016-12-06 117 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還創建的時刻,將數據存儲在那裏最快的訪問。