SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2016 CTP 2.1 のインデックスの整理

3 comments

今まで、SQL Server 2016 CTP 2 について投稿してきて、メモリ最適化テーブルの検証をしようと思ったのですが、一度インデックスの種類の整理をしたいと思い閑話休題がてら。

調べてみたところ、以下のようになるのではと思います。

行ストア 列ストア メモリ最適化
クラスター化 非クラスター化 クラスター化 非クラスター化 ハッシュ 非クラスター化
行ストア クラスター化 ×
2016 から
×
非クラスター化
2016 から

2016 から
×
列ストア クラスター化 ×
2016 から
×
2016 から
非クラスター化
2016 から

2016 から
× ×
メモリ最適化 ハッシュ ×
2016 から
×
非クラスター化

 

■行ストア

クラスター化インデックスと非クラスター化インデックスの概念
CREATE INDEX (Transact-SQL)
Maximum Capacity Specifications for SQL Server

  • クラスター化インデックス (CI)
    • 1 テーブルにつき 1 つのみ作成可能
    • 主キーとして設定可能
    • 最大で 32 列インデックスに含めることができる
      • SQL Server 2014 までは最大で 16 列
    • 最大サイズは 900 バイト
    • 非クラスター化インデックスとの共存が可能
    • クラスター化列ストアインデックスとの共存は不可能
    • 非クラスター化列ストアインデックスとの共存は可能
      • SQL Server 2016 から
  • 非クラスター化インデックス (NCI)
    • 1 テーブルにつき 999 個作成可能
    • 主キーとして設定可能
    • 最大で 32 列インデックスに含めることができる
      • 2014 までは最大で 16 列
    • 最大サイズは 1,700 バイト
      • SQL Server 2014 までは 900 バイト
    • フィルター選択されたインデックスとして作成することが可能
    • インデックスに付加列を含めることが可能
    • クラスター化インデックスとの共存が可能
    • クラスター化列ストアインデックスとの共存が可能
      • SQL Server 2016 から
    • 非クラスター化列ストアインデックスとの共存が可能
      • SQL Server 2016 から

■列ストア

列ストア インデックスの説明
CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL)
CREATE COLUMNSTORE INDEX (Transact-SQL)

  • クラスター化列ストアインデックス (CCI)
    • 1 テーブルにつき 1 つのみ作成可能
    • 最大で 1,024 列 インデックスに含めることができる
      • テーブルのすべての列を含めることが可能
    • 主キーとして設定できない
      • 非クラスター化インデックスで主キーを設定することが可能
        • SQL Server 2016 から
    • クラスター化インデックスとの共存は不可能
      • 複数のクラスター化インデックスはサポートされていない
    • 非クラスター化インデックスとの共存が可能
      • SQL Server 2016 から
    • 非クラスター化列ストアインデックスとの共存は不可能
      • 複数の列ストアインデックスはサポートされていない
    • メモリ最適化テーブルとの共存が可能
      • SQL Server 2016 から
      • メモリ最適化テーブルは SCHEMA_AND_DATA を使う
      • Row Store や Deleted Rows Table 等にメモリ最適化テーブルを利用し、バックグラウンドタスクで列ストア化 (通常の列ストアの動作をメモリ最適化テーブルを組み合わせ効率化)
  • 非クラスター化列ストアインデックス (NCI)
    • 1 テーブルにつき 1 つのみ作成可能
    • 最大で 1,024 列 インデックスに含めることができる
      • テーブルのすべての列を含めることが可能
    • 主キーとして設定できない
      • クラスター化インデックス / 非クラスター化インデックスで主キーを設定することが可能
    • クラスター化インデックスとの共存が可能
      • SQL Server 2016 から
    • 非クラスター化インデックスとの共存が可能
      • SQL Server 2016 から
    • クラスター化列ストアインデックスとの共存は不可能
      • 複数の列ストアインデックスはサポートされていない
    • フィルター選択されたインデックスとして作成することが可能
    • メモリ最適化テーブルとの共存は不可能

■メモリ最適化テーブル

  • 共通
    • クラスター化インデックスは含めることができない
    • 最低一つのインデックスまたは主キーを含む必要がある
      • SCHEMA_AND_DATA を使用する場合は主キーが必要
        • 主キーを設定する場合は非クラスター化インデックスで設定する
          • クラスター化インデックスは使用できない
    • クラスター化インデックスとの共存は不可能
    • メモ
      リ最適化テーブルには最大で 1,024 列含めることができる
    • 列ストアインデックスとの共存は不可能
    • クラスター化列ストアインデックスとの共存が可能
      • SCHEMA_AND_DATA の場合のみ設定可能
      • SQL Server 2016 から
    • 非クラスター化列ストアインデックスとの共存は不可能

メモリ最適化テーブルでのインデックス使用のガイドライン
ハッシュ インデックス

  • ハッシュインデックス
    • 非クラスター化インデックスと合わせて最大で 8 個作成可能
    • インデックスには単一の列のみを含めることができる
    • バケットカウントを指定する必要がある
  • 非クラスター化インデックス
    • ハッシュインデックスと合わせて最大で 8 個作成可能
    • 最大で 32 列インデックスに含めることができる
      • 2014 までは最大で 16 列
Share

Written by Masayuki.Ozawa

7月 4th, 2015 at 7:30 pm

Posted in SQL Server

Tagged with ,

3 Responses to 'SQL Server 2016 CTP 2.1 のインデックスの整理'

Subscribe to comments with RSS or TrackBack to 'SQL Server 2016 CTP 2.1 のインデックスの整理'.

  1. カラムストアインデックスとメモリ最適化テーブルの組合せが2016から出来るとなっていますが、CTP2で検証したところ、2014の時と同様のエラーが出力されます。
    CTP2ではまだ未対応なのでしょうか?OSはWindows2012R2です。

    わぐ

    24 7月 15 at 23:13

  2. 列ストアとメモリ最適化テーブルの組み合わせですが、CTP 2 で対応しています。
    以下のような構文で作成できるはずですが駄目でしょうか?
    2014 では、以下のようなテーブルは作成できませんが、2016 では作成ができるようになっています。
    — 列ストアインデックス + メモリ最適化テーブル
    CREATE TABLE HK_CI(
    Col1 int IDENTITY,
    Col2 uniqueidentifier ,
    CONSTRAINT PK_HK_CI PRIMARY KEY NONCLUSTERED (Col1),
    INDEX CCIX_HK_CI CLUSTERED COLUMNSTORE
    )
    WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
    GO

    masayuki.ozawa

    26 7月 15 at 11:24

  3. 作成することが出来ました、ありがとうございます!!
    ちなみに私が作ろうとして駄目だった手順は下記の2通りです。
    ①テーブル作成
    ②メモリ最適化オプティマイザーでメモリ最適化テーブル化
    ③COLUMNSTORE INDEXの作成を行うとエラー発生。
    (SQL文、GUIともにどちらからも不可でした。)
    ①テーブル作成
    ②GUIからCOLUMNSTORE INDEX CLUSTER を作成
    ③メモリ最適化オプティマイザーからメモリ最適化テーブル化しようとしたが、COLUMNSTORE INDEX があるため作成できないとのエラー。

    わぐ

    26 7月 15 at 22:50

Leave a Reply