資料行存放區索引的新功能

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

瞭解每個 SQL Server 版本可用的資料行存放區功能,以及最新版的 SQL Database、Azure Synapse Analytics 和 Analytics Platform System (PDW)。

產品版本的功能摘要

本表會摘要說明資料行存放區索引的重要功能以及提供它們的產品。

資料行存放區索引功能 SQL Server 2012 (11.x) SQL Server 2014 (12.x) SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) SQL Database1 Azure Synapse Analytics 專用 SQL 集區
多執行緒查詢的批次模式執行2
單一執行緒查詢的批次模式執行
封存壓縮選項
快照集隔離和讀取認可快照集隔離
建立資料表時指定資料行存放區索引
AlwaysOn 支援資料行存放區索引
AlwaysOn 可讀取次要支援唯讀的非叢集資料行存放區索引
AlwaysOn 可讀取次要支援可更新的資料行存放區索引
堆積或 B-tree 的唯讀非叢集資料行存放區索引 3 3 3 3 3 3
堆積或 B-tree 的可更新非叢集資料行存放區索引
有非叢集資料行存放區索引的堆積或 B-tree 允許其他的 B-tree 索引
可更新的叢集資料行存放區索引
叢集資料行存放區索引的 B-tree 索引
記憶體最佳化資料表的資料行存放區索引
非叢集資料行存放區索引定義支援使用篩選的條件
CREATE TABLEALTER TABLE 中資料行存放區索引的壓縮延遲選項
支援 nvarchar(max) 類型 4
資料行存放區索引可以具有非保存的計算資料行
Tuple Mover 背景合併支援
已排序的叢集資料行存放區索引

1 針對 SQL Database,Azure SQL 資料庫 DTU 進階層、DTU 標準層 - S3 和更高階版本以及所有 vCore 層,都可以使用資料行存放區索引。 針對 SQL Server 2016 (13.x) SP1 及更新版本,所有版本皆可使用資料行存放區索引。 針對 QL Server 2016 (13.x) (SP1 以前) 及舊版,只有 Enterprise Edition 可使用資料行存放區索引。

2批次模式作業的平行處理原則程度 (DOP) 限制如下:SQL Server Standard Edition 為 2,SQL Server Web 和 Express Edition 為 1。 此限制指的是在磁碟式資料表和經記憶體最佳化的資料表上建立的資料行存放區索引。

3 若要建立唯讀的非叢集資料行存放區索引,請將索引儲存在唯讀的檔案群組中。

4 在專用 SQL 集區中不支援,但在無伺服器 SQL 集區中支援。

SQL Server 2022 (16.x)

SQL Server 2022 (16.x) 新增下列功能。 如需詳細資訊,請參閱 SQL Server 2022 (16.x) 的新功能

  • 已排序的叢集資料行存放區索引會根據已排序的資料行述詞改善查詢的效能。 已排序的資料行存放區索引可藉由完全略過資料區段來改善效能。 這可大幅減少完成資料行存放區資料查詢所需的 IO。 如需詳細資訊,請參閱區段刪除。 已排序的叢集資料行存放區索引可在 SQL Server 2022 (16.x) 中使用。 如需詳細資訊,請參閱 CREATE COLUMNSTORE INDEX使用已排序的叢集資料行存放區索引微調效能

  • 透過叢集資料行存放區資料列群組字串刪除進行述詞下推,會使用界限值來最佳化字串搜尋。 所有資料行存放區索引都可利用依資料類型刪除區段的增強功能。 從 SQL Server 2022 (16.x) 開始,這些區段刪除功能會擴充到字串、二進位、GUID 資料類型,以及小數位數大於二的 datetimeoffset 資料類型。 先前,資料行存放區區段刪除只適用於數值、日期和時間資料類型,以及小數位數小於或等於 2 的 datetimeoffset 資料類型。 升級至支援字串 min/max 區段刪除的 SQL Server 版本 (SQL Server 2022 (16.x) 和更新版本) 之後,在使用 REBUILD 或 DROP/CREATE 重建資料行存放區索引之前,都無法利用此功能。

SQL Server 2019 (15.x)

SQL Server 2019 (15.x) 新增下列功能:

函數

從 SQL Server 2019 (15.x) 開始,背景合併工作將會協助 Tuple Mover,該工作會自動壓縮已存在一段時間的較小 OPEN 差異資料列群組 (由內部閾值決定),或合併已刪除大量資料列的 COMPRESSED 資料列群組。 之前,需要進行索引重新組織作業,才能合併包含部分刪除之資料的資料列群組。 這可改善一段時間的資料行存放區索引品質。

SQL Server 2017 (14.x)

SQL Server 2017 (14.x) 新增下列功能。

函數

  • SQL Server 2017 (14.x) 支援在叢集資料行存放區索引中使用非保存計算資料行。 叢集資料行存放區索引中不支援保存的計算資料行。 您無法在計算資料行上建立非叢集資料行存放區索引。

SQL Server 2016 (13.x)

SQL Server 2016 (13.x) 新增索引鍵增強功能,以改善資料行存放區索引的效能和彈性。 這些改善會強化資料倉儲案例,並進行即時作業分析。

函數

  • 資料列存放區資料表可以有一個可更新的非叢集資料行存放區索引。 非叢集資料行存放區索引以前是唯讀的。

  • 非叢集資料行存放區索引定義支援使用篩選的條件。 若要將 OLTP 資料表新增資料行存放區索引對效能的影響降到最低,請只對您作業的工作負載冷資料,使用篩選的條件建立非叢集資料行存放區索引。

  • 記憶體中的資料表可以有一個資料行存放區索引。 您可以在建立資料表時建立此索引,或之後再使用 ALTER TABLE (Transact-SQL) 新增。 從前,只有磁碟資料表可以有資料行存放區索引。

  • 叢集資料行存放區索引可以有一或多個非叢集資料列存放區索引。 資料行存放區索引以前不支援非叢集索引。 SQL Server 會自動維護 DML 作業的非叢集索引。

  • 您可以使用 B-tree 索引對叢集資料行存放區索引強制執行這些條件約束,來支援主索引鍵和外部索引鍵。

  • 資料行存放區索引的壓縮延遲選項,可將即時作業分析的交易工作負載影響降到最低。 這個選項允許經常變更的資料列在穩定後,再壓縮到資料行存放區。 如需詳細資訊,請參閱 CREATE COLUMNSTORE INDEX (Transact-SQL)開始使用資料行存放區進行即時作業分析

資料庫相容性等級 120 或 130 的效能

  • 資料行存放區索引支援讀取認可快照集隔離等級 (RCSI) 和快照集隔離 (SI)。 這可讓交易式一致性分析查詢沒有任何鎖定。

  • 資料行存放區透過移除刪除的資料列,但不必明確重建索引,來支援索引重組。 ALTER INDEX ... REORGANIZE 陳述式會根據內部定義的原則,如同線上作業從資料行存放區中移除已刪除的資料列

  • 您可在 Always On 可讀取次要複本上存取資料行存放區索引。 您可將分析查詢卸載到 Always On 次要複本,以改善作業分析的效能。

  • 當資料類型使用不超過 8 個位元組,且不是字串類型時,彙總下推會在資料表掃描期間計算彙總函式 MINMAXSUMCOUNTAVG。 無論是否使用 GROUP BY 子句,叢集資料行存放區索引和非叢集資料行存放區都支援彙總下推。 在 SQL Server 上,這項增強功能保留給 Enterprise Edition 使用。

  • 字串述詞下推會加速比較 VARCHAR/CHAR 或 NVARCHAR/NCHAR 字串類型的查詢。 這適用於一般比較運算子和包括運算子,例如使用點陣圖篩選的 LIKE。 這適用於所有支援的定序。 在 SQL Server 上,這項增強功能保留給 Enterprise Edition 使用。

  • 利用向量型硬體功能增強批次模式作業。 資料庫引擎會偵測 AVX 2 (Advanced Vector Extensions) 和 SSE 4 (Streaming SIMD Extensions 4) 硬體擴充功能的 CPU 支援層級,並在支援的情況下使用。 在 SQL Server 上,這項增強功能保留給 Enterprise Edition 使用。

資料庫相容性等級 130 的效能

  • 新的批次模式執行支援使用任一這些作業的查詢︰

    • SORT
    • 使用多個不同的函式進行彙總。 部分範例:COUNT/COUNTAVG/SUMCHECKSUM_AGGSTDEV/STDEVP
    • 視窗彙總函式:COUNTCOUNT_BIGSUMAVGMINMAXCLR
    • 視窗使用者定義彙總:CHECKSUM_AGGSTDEVSTDEVPVARVARPGROUPING
    • 視窗彙總分析函式:LAGLEADFIRST_VALUELAST_VALUEPERCENTILE_CONTPERCENTILE_DISCCUME_DISTPERCENT_RANK
  • MAXDOP 1 下執行,或以批次模式執行序列查詢計畫的單一執行緒查詢。 先前只有多執行緒查詢會批次執行的方式來執行。

  • 在存取資料列存放區或資料行存放區索引中的資料時,記憶體最佳化資料表查詢在 SQL InterOp 模式中可以有平行計畫。

支援能力

這些系統檢視表對資料行存放區而言是新的︰

這些記憶體中的 OLTP 型 DMV 包含資料行存放區的更新︰

限制

  • 至於記憶體中資料表,資料行存放區索引必須包含所有的資料行,而資料行存放區索引不能有篩選的條件。
  • 至於記憶體中資料表,針對資料行存放區索引的查詢只能在 InterOP 模式中執行,不是在記憶體中原生模式中執行。 支援平行執行。

已知問題

適用於:SQL Server、Azure SQL 資料庫、Azure SQL 受控執行個體、Azure Synapse Analytics 專用 SQL 集區

  • 目前,壓縮資料行存放區區段中的 LOB 資料行 (varbinary(max)、varchar(max) 和 nvarchar(max)) 不會受到 DBCC SHRINKDATABASE 和 DBCC SHRINKFILE 的影響。

SQL Server 2014 (12.x)

SQL Server 2014 (12.x) 引進叢集數據行存放區索引作為主要記憶體格式。 這允許一般的負載以及更新、刪除和插入作業。

  • 數據表可以使用叢集數據行存放區索引作為主要數據表記憶體。 數據表上不允許其他索引,但叢集數據行存放區索引是可更新的,因此您可以執行一般載入,並變更個別的數據列。
  • 非叢集數據行存放區索引繼續具有與 SQL Server 2012 (11.x) 中相同的功能,但目前可在批次模式中執行的其他運算符除外。 而除非重建和使用資料分割切換,否則仍然不能更新。 只有磁碟資料表支援非叢集資料行存放區索引,記憶體中資料表不支援。
  • 叢集和非叢集數據行存放區索引具有進一步壓縮數據的封存壓縮選項。 封存選項有利於減少記憶體中和磁碟上的資料大小,但是確實會降低查詢效能。 它非常適合不常存取的資料。
  • 叢集資料行存放區索引和非叢集資料行存放區索引的作用十分相似,它們使用相同的單欄式儲存體格式、相同的查詢處理引擎,和相同的動態管理檢視集合。 差別在於主要和次要的索引類型,而且非叢集資料行存放區索引是唯讀的。
  • 這些運算子可在批次模式下執行多執行緒查詢︰scan、filter、project、join、group by 和 union all。

SQL Server 2012 (11.x)

SQL Server 2012 (11.x) 引進了非叢集資料行存放區索引,作為資料列存放區資料表的另一個索引類型,以及資料行存放區資料查詢批次處理方式。

  • 資料列存放區資料表可以有一個非叢集資料行存放區索引。
  • 資料行存放區索引是唯讀的。 建立資料行存放區索引之後,您無法執行 INSERTDELETEUPDATE 作業來更新資料表;若要執行這些作業,您必須卸除索引,並更新資料表,然後重建資料行存放區索引。 您可以切換資料分割,在資料表中載入其他資料。 資料分割切換的優點是您可以載入資料,卻不用卸除和重建資料行存放區索引。
  • 數據行存放區索引一律需要額外的記憶體,通常是數據列存放區的額外 10%,因為它會儲存數據的複本。
  • 批次處理序提供 2 倍或更高的查詢效能,但僅供平行查詢執行使用。