列ストア インデックス - 新機能

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

SQL Server の各バージョンで利用可能な列ストア機能の概要と、SQL Database、Azure Synapse Analytics、および Analytics Platform System (PDW) の最新リリース。

注意

SQL Database では、列ストア インデックスが Azure SQL データベース Premium レベル、Standard レベル (S3 以上)、すべての vCore レベルで使用できます。 SQL Server 2016 (13.x) SP1 以降では、列ストア インデックスがすべてのエディションで使用できます。 SQL Server 2016 (13.x) (SP1 より前) 以前のバージョンでは、列ストア インデックスが Enterprise Edition でのみ使用できます。

製品リリースの機能の概要

列ストア インデックスの主な機能と、これらの機能を利用できる製品をまとめた表を次に示します。

列ストア インデックスの機能 SQL Server 2012 (11.x) SQL Server 2014 (12.x) SQL Server 2016 (13.x) SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Database Azure Synapse Analytics
マルチ スレッド クエリのバッチ モード実行 はい はい はい はい はい
シングル スレッド クエリのバッチ モード実行 はい はい
アーカイブ圧縮オプション はい はい
スナップショット分離および Read Committed スナップショット分離 はい はい はい
テーブルの作成時に、列ストア インデックスを指定する はい はい
AlwaysOn は列ストア インデックスをサポートする はい はい はい はい
AlwaysOn の読み取り可能なセカンダリは非クラスター化列ストア インデックスをサポートする はい はい はい はい はい はい
Always On の読み取り可能なセカンダリは、更新可能な列ストア インデックスをサポートする はい はい
ヒープまたは B ツリーの読み取り専用の非クラスター化列ストア インデックス はい はい はい 1 はい 1 はい 1 はい 1 はい 1
ヒープまたは B ツリーの更新可能な非クラスター化列ストア インデックス はい はい はい はい はい
ヒープまたは B ツリーで許容される追加の B ツリー インデックスには非クラスター化列ストア インデックスがある はい はい はい はい
更新可能なクラスター化列ストア インデックス はい はい
クラスター化列ストア インデックスの B ツリー インデックス はい はい
メモリ最適化テーブルの列ストア インデックス はい はい
非クラスター化列ストア インデックスの定義では、フィルター適用条件の使用をサポートする はい はい はい はい
CREATE TABLE および ALTER TABLE での列ストア インデックスの圧縮遅延オプション はい はい はい
列ストア インデックスは保存されない計算列を使用できる はい はい
組ムーバーのバックグラウンド マージ サポート はい はい

1 読み取り専用の非クラスター化列ストア インデックスを作成するには、読み取り専用ファイル グループにインデックスを格納します。

注意

バッチ モード操作の並列処理の度合い (DOP) は、SQL Server Standard Edition では 2 DOP、SQL Server Web Edition および Express Edition では 1 DOP に制限されます。 これは、ディスク ベース テーブルとメモリ最適化テーブルで作成された列ストア インデックスに当てはまります。

SQL Server 2019 (15.x)

SQL Server 2019 (15.x) での新機能は次のとおりです。

機能

  • SQL Server 2019 (15.x) 以降、組ムーバーは、内部しきい値によってしばらくの間存在していると判断された小さな 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) には、パフォーマンスと列ストア インデックスの柔軟性を向上させるために重要な機能強化が追加されます。 これらの機能強化により、データ ウェアハウスのシナリオが強化され、リアルタイムの運用分析が可能になります。

機能

  • 行ストア テーブルで、更新可能な非クラスター化列ストア インデックスを 1 つ使用できます。 以前、非クラスター化列ストア インデックスは、読み取り専用でした。

  • 非クラスター化列ストア インデックスの定義で、フィルター適用条件の使用をサポートします。 OLTP テーブルに列ストア インデックスを追加することによるパフォーマンスへの影響を最小限に抑えるには、フィルター条件を使って、用して、運用ワークロードのコールド データのみに、非クラスター化列ストア インデックスを作成します。

  • インメモリ テーブルでは、列ストア インデックスを 1 つ使用できます。 これは、テーブルの作成時に作成することも、後で ALTER TABLE (Transact-SQL) を使用して追加することもできます。 以前は、列ストア インデックスを保持できたのはディスク ベースのテーブルのみでした。

  • クラスター化列ストア インデックスでは、1 つ以上の非クラスター化行ストア インデックスを使用できます。 以前、列ストア インデックスでは、非クラスター化インデックスはサポートされていませんでした。 SQL Server では、DML 操作の非クラスター化インデックスが自動的に維持されます。

  • B ツリー インデックスを使用して主キーと外部キーをサポートし、これらの制約をクラスター化列ストア インデックスに適用します。

  • 列ストア インデックスには、リアルタイム運用分析へのトランザクション ワークロードの影響を最小限に抑える圧縮遅延オプションが用意されています。 このオプションでは、頻繁に変更される行が安定するように配慮してから、それらの行を列ストアに圧縮します。 詳しくは、「CREATE COLUMNSTORE INDEX (Transact-SQL)」および「列ストアを使用したリアルタイム運用分析の概要」をご覧ください。

データベースの互換性レベルが 120 または 130 の場合のパフォーマンス

  • 列ストア インデックスでは、Read Committed スナップショット分離レベル (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 相互運用モードで使用できます。

サポート

次に、列ストア用の新しいシステム ビューを示します。

これらのインメモリ OLTP ベースの DMV には、列ストアに対する更新が含まれます。

制限事項

  • インメモリ テーブルの場合、列ストア インデックスにはすべての列が含まれている必要があります。列ストア インデックスにフィルター適用条件を含めることはできません。
  • インメモリ テーブルの場合、列ストア インデックスに対するクエリは相互運用モードでのみ実行され、インメモリ ネイティブ モードでは実行されません。 並列実行がサポートされています。

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) では、行ストア テーブルに対するもう 1 つのインデックス型としての非クラスター化列ストア インデックスと、列ストア データに対するクエリのバッチ処理が導入されました。

  • 行ストア テーブルでは、非クラスター化列ストア インデックスを 1 つ使用することができます。
  • 列ストア インデックスは読み取り専用です。 列ストア インデックスの作成後は、INSERTDELETE、および UPDATE の操作で、テーブルを更新することはできません。これらの操作を実行するには、インデックスを削除し、テーブルを更新し、列ストア インデックスを再構築する必要があります。 パーティション切り替えを使用することで、テーブルに追加データを読み込むことができます。 パーティション切り替えの利点は、列ストア インデックスを削除して再構築しなくても、データを読み込むことができることです。
  • 列ストア インデックスでは、データのコピーを格納するため、常に余分な (通常は、行ストアより 10% 多い) ストレージを確保しておく必要があります。
  • バッチ処理は、クエリのパフォーマンスを 2 倍以上向上させますが、並列クエリの実行でしか利用できません。

参照

列ストア インデックスの設計ガイダンス
列ストア インデックスのデータ読み込みガイダンス
列ストア インデックスのクエリ パフォーマンス
列ストアを使用したリアルタイム運用分析の概要
データ ウェアハウスの列ストア インデックス
インデックスの再編成と再構築