Sql-Server

聚集列儲存索引和外鍵

  • December 7, 2017

我正在使用索引對數據倉庫進行性能調整。我對 SQL Server 2014 相當陌生。Microsoft 描述了以下內容:

“我們將聚集列儲存索引視為儲存大型數據倉庫事實表的標準,並期望它將在大多數數據倉庫場景中使用。由於聚集列儲存索引是可更新的,因此您的工作負載可以執行大量的插入、更新、和刪除操作。” http://msdn.microsoft.com/en-us/library/gg492088.aspx

但是,如果您進一步閱讀文件,您會發現受到限制和限制:

“不能有唯一約束、主鍵約束或外鍵約束。”

這讓我很困惑!出於各種原因(數據完整性、語義層可見的關係……),在數據倉庫中擁有外鍵是一種很好的做法(不是強制性的)

所以微軟提倡數據倉庫場景的聚集列儲存索引;但是,它不能處理外鍵關係?!

我對此是否正確?您會建議哪些其他方法?過去,我在數據倉庫場景中使用過非聚集列儲存索引,並通過刪除和重建來載入數據。然而,SQL Server 2014 並沒有為數據倉庫增加真正的新價值??

你在這裡有很多問題:

問:(缺少外鍵)讓我很困惑!出於多種原因(數據完整性、語義層可見的關係……)在 DWH 中包含 Fk 是一種很好的做法(不是強制性的)

答:正確,在數據倉庫中擁有外鍵通常是一種很好的做法。但是,聚集列儲存索引尚不支持該功能。

Q:所以MS提倡DWH場景使用Clustered Column store索引,但是不能處理FK關係?!

答:Microsoft 為您提供工具。如何使用這些工具取決於您。

如果您最大的挑戰是數據倉庫中缺乏數據完整性,那麼您需要的工具是帶有外鍵的傳統表。

如果您最大的挑戰是查詢性能,並且您願意在載入過程中檢查自己的數據完整性,那麼您需要的工具就是聚集列儲存索引。

問:但是 SQL 2014 並沒有為 DWH 添加真正的新價值??

答:值得慶幸的是,聚集列儲存並不是 SQL Server 2014 中唯一的新功能。例如,查看新的基數估計器。

問:為什麼我對我最喜歡的功能的實現方式如此憤怒和痛苦?

A:你抓住了我——你並沒有真正問過那個問題——但我還是會回答的。歡迎來到第三方軟體的世界,並非所有內容都是根據您的確切規格建構的。如果您對希望在 Microsoft 產品中看到的更改充滿熱情,請查看Connect.Microsoft.com。這是他們的回饋過程,您可以在其中送出更改,其他人可以投票,然後產品團隊會閱讀並告訴您他們為什麼不實施它。有時。大多數時候,他們只是將其標記為“無法修復,可在我的機器上執行”,但嘿,有時您確實會得到一些答案。

我能理解你覺得一些你習慣的東西失去了。但這僅僅是因為他們失踪了。

儘管如此,當外鍵只是一個概念(當時我們通過觸發器實現)而不是諸如約束之類的物理實現時,SQL Server 已成功使用。至少在 SQL Server 7.0 中就存在聲明性引用完整性,但比目前的實現要弱得多。

關於聚集列儲存索引的值,它確實提供了一個索引並且行是可更新的。您可能會發現此討論很有價值:http ://sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/

Manoj 指出,有一種方法可以在此表之上創建索引/物化視圖,將分群鍵作為 PK(表/視圖的第一列)。當然,這是否適合您,是您必須做出的決定。

但是,正如 Aaron Bertrand 和 TomTom 評論的那樣,這一切都是為了更好的性能。如果您可以管理與您有關的其他問題(並且我相信它們可以管理的),那麼您將獲得很多好處。因此,使用 ColumnStore可以做的事情並自己管理缺少的功能。

引用自:https://dba.stackexchange.com/questions/78694