Sql-Server

兼容級別 100 的數據庫是否支持列儲存索引?

  • November 5, 2020

我有一個在 SQL Server 2017 Developer Edition 實例上執行的實例。我恢復了兼容級別為 100 的數據庫 ContosoRetailDW。恢復操作後,我執行以下查詢:

CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactOnlineSales ON dbo.FactOnlineSales

已成功創建列儲存索引。

我的問題與兼容級別有關。據我所知,列儲存索引的概念本身是在SQL Server 2012 中出現的。而且聚集列儲存索引是在SQL Server 2014 中發布的。兼容級別為100 的數據庫如何支持聚集列儲存索引?似乎數據庫仍然繼承了目前實例的特性。

Compat 級別用於提供更高程度的向後兼容性。我們可以把它分為幾類:

在更高版本的 SQL Server 中刪除的語言元素仍然可以在以更低兼容級別執行的那個版本中使用。現在這樣的人不多了。

行為改變可以保持舊的行為與較低的兼容級別。

現在在更高版本中的新語言元素是關鍵字/保留詞。即,如果您有一個以這種方式命名的對象(正式名稱為“標識符”),則在此更高版本中,您必須

$$ delimit $$當您引用該標識符時。為了提供向後兼容性,在較低的兼容級別中,這些新的語言元素將不可用。但是請注意,有很多新的語言元素不會引入新的關鍵字,並且不必在較低的兼容級別中被阻止。 表現。使用較低的兼容級別,您可能會擁有與在該版本中執行時相同的執行計劃。即,假設您保持舊的數據庫兼容級別,升級引擎版本時不會出現性能意外。理想情況下。

如果允許新功能不會引入向後兼容性問題,則無需阻止新功能。您的列儲存索引就是這樣一個例子。

至於每個兼容級別的確切作用,這裡有很好的記錄:https ://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level

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