sys.column_store_segments (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン)

列ストア インデックス内の列セグメントごとに 1 行を返します。 行グループごとに列ごとに 1 つの列セグメントがあります。 たとえば、10 個の行グループと 34 列のテーブルから 340 行が返されます。

列名 データ型 説明
partition_id bigint パーティション ID を示します。 データベース内で一意です。
hobt_id bigint この列ストア インデックスを持つテーブルのヒープまたは B ツリー インデックス (HoBT) の ID。
column_id int 列ストア列の ID。
segment_id int 行グループの ID。 下位互換性のために、列名は引き続き行グループ ID であってもsegment_id呼び出されます。 セグメントは、hobt_id、partition_id、column_id、segment_id><>を使用して<一意に識別できます。
version int 列セグメント形式のバージョン。
encoding_type int そのセグメントに使用されるエンコードの種類:

1 = VALUE_BASED - 辞書のない非文字列/バイナリ (内部バリエーションのある 4 に似ています)

2 = VALUE_HASH_BASED - ディクショナリ内の共通値を持つ非文字列/バイナリ列

3 = STRING_HASH_BASED - ディクショナリ内の共通値を持つ文字列/バイナリ列

4 = STORE_BY_VALUE_BASED - 辞書のない非文字列/バイナリ

5 = STRING_STORE_BY_VALUE_BASED - 辞書のない文字列/バイナリ

詳細については、「解説」を参照してください。
row_count int 行グループ内の行数。
has_nulls int 列セグメントに null 値がある場合は 1。
base_id bigint エンコードタイプ 1 が使用されている場合の基本値 ID。 エンコードの種類 1 が使用されていない場合、base_idは -1 に設定されます。
大きさ float エンコードタイプ 1 が使用されている場合の大きさ。 エンコードの種類 1 が使用されていない場合、大きさは -1 に設定されます。
primary_dictionary_id int 値 0 は、グローバル ディクショナリを表します。 値 -1 は、この列にグローバル ディクショナリが作成されていないことを示します。
secondary_dictionary_id int 0 以外の値は、現在のセグメント (つまり行グループ) のこの列のローカル ディクショナリを指します。 値 -1 は、このセグメントのローカル ディクショナリがないことを示します。
min_data_id bigint 列セグメントの最小データ ID。
max_data_id bigint 列セグメント内の最大データ ID。
null_value bigint NULL を表すために使用される値。
on_disk_size bigint セグメントのサイズ (バイト単位)。

解説

列ストア セグメントのエンコードの種類は、セグメント データを分析することによって、ストレージ コストを最も低くすることを目的として、データベース エンジンによって選択されます。 データが主に異なる場合、データベース エンジンでは値ベースのエンコードが使用されます。 データがほとんど区別されない場合、データベース エンジンではハッシュ ベースのエンコードが使用されます。 文字列ベースのエンコードと値ベースのエンコードの選択は、格納されるデータの種類 (文字列データかバイナリ データかに関係なく) に関連します。 可能な限り、すべてのエンコードでビット パッキングと実行長のエンコードが利用されます。

アクセス許可

すべての列には、テーブルに対する少なくとも VIEW DEFINITION アクセス許可が必要です。 ユーザーもアクセス許可を持っていない限り、次の列は SELECT null を返します。 has_nullsbase_idmagnitudemin_data_idmax_data_idnull_value

カタログ ビューでのメタデータの表示が、ユーザーが所有しているかそのユーザーが権限を許可されている、セキュリティ保護可能なメタデータに制限されます。 詳細については、「 Metadata Visibility Configuration」を参照してください。

次のクエリは、列ストア インデックスのセグメントに関する情報を返します。

SELECT i.name, p.object_id, p.index_id, i.type_desc,   
    COUNT(*) AS number_of_segments  
FROM sys.column_store_segments AS s   
INNER JOIN sys.partitions AS p   
    ON s.hobt_id = p.hobt_id   
INNER JOIN sys.indexes AS i   
    ON p.object_id = i.object_id  
WHERE i.type = 5 OR i.type = 6  
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;  
GO  

参照

オブジェクト カタログ ビュー (Transact-SQL)
カタログ ビュー (Transact-SQL)
SQL Server システム カタログに対するクエリに関してよく寄せられる質問
sys.columns (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
列ストア インデックスの説明
sys.column_store_dictionaries (Transact-SQL)