2014-02-27 30 views
3

首先,我瞭解主鍵在SQL中的表或任何數據庫中的作用。我應該在用戶定義表類型上使用主鍵嗎?

然而,當涉及到用戶定義的表類型,我發現自己無法看到我爲什麼要創建一個主鍵。根據我的經驗,我發現他們沒有性能優勢,但我懷疑我的發現可能來自我對它們的一般用法和有限的經驗,而不是一個更有經驗的觀點。

例如,我一般使用表值參數爲插入/更新程序,或者通過在創建選擇查詢中使用的值的陣列。我發現他們沒有性能上的好處,如果有什麼我經歷了一個小的性能下降(但我們最多談的是10毫秒,所以它幾乎可以忽略不計)。

我應披露它們內部傳遞的任何數據已經被清洗/小心翼翼有序,所以有可能,我沒有看到好處,由於這一點,但我不容易知道的方式。再次

的問題因此,我應該有我的用戶定義的表類型的主鍵或只是不那麼重要嗎?

道歉,如果這是重複的。我做了大量的搜索,但後來我可能會使用錯誤的關鍵字組合。

您的見解將永遠將不勝感激。

+1

由於必須構建聚簇索引,因此性能下降很小。如果數據是預先訂購的,並且您不會對數據執行選擇性查詢,那麼索引只是浪費資源。如果你不想在集合上強加新的順序,或者反覆調用對集合的選擇性查詢,那麼將從索引中受益,並且如果集合足夠大,則值得創建聚集索引以及潛在的其他非集羣indecies。 – Jodrell

+0

@Jodrell,謝謝,這很有道理。由於一些瘋狂的原因,我沒有考慮構建聚簇索引的開銷!我也很高興知道,我對預先訂購的數據的假設是準確的。 –

回答

-1

您可以創建用戶定義的表類型的主鍵,這將導致的集羣index.But是不可能建立在用戶定義的表類型的非聚集索引..

形成爲了您的信息請參閱下面的頁面

http://technet.microsoft.com/en-us/library/bb522526(v=sql.105).aspx

+0

謝謝。我已經花了很多時間預先查看特定頁面。雖然我理解了所有這些,但在這種情況下,它並沒有真正回答我應該/我不應該遇到的難題。 –

-1

如果你傳遞數組是一組ID,以配合其他表直接加入它使具有聚集主鍵全部意義。

爲了避免花費時間排序插入數據之前,您應該有它已經下令對應用端。

在這種我已經經歷了大約400ms的收益的情況下。

它必須按情況評估CASA。

相關問題