適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
列ストア インデックス内の列セグメントごとに 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 に設定されます。 |
magnitude |
float | エンコードの種類 1 が使用されている場合の大きさ。 エンコード・タイプ 1 が使用されていない場合、 magnitude は -1 に設定されます。 |
primary_dictionary_id |
int | 値 0 は、グローバル ディクショナリを表します。 値 -1 は、この列にグローバル ディクショナリが作成されていないことを示します。 |
secondary_dictionary_id |
int | 0 以外の値は、現在のセグメント (行グループなど) 内のこの列のローカル ディクショナリを指します。 値 -1 は、このセグメントにローカル ディクショナリがないことを示します。 |
min_data_id |
bigint | 内部使用のみ。 |
max_data_id |
bigint | 内部使用のみ。 |
null_value |
bigint | NULL を表すために使用される値。 |
on_disk_size |
bigint | セグメントのサイズ (バイト単位)。 |
collation_id |
int | セグメントが作成されたときの現在の照合順序。 内部 ID にマップされます。 内部使用のみ。 適用対象: SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、および Azure SQL Managed Instance |
min_deep_data |
varbinary(18) | セグメントの削除に使用されます。1 内部使用の場合のみ。 適用対象: SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、および Azure SQL Managed Instance |
max_deep_data |
varbinary(18) | セグメントの削除に使用されます。1 内部使用の場合のみ。 適用対象: SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、および Azure SQL Managed Instance |
1 拡張されたデータ型のセット (SQL Server 2022 (16.x) で導入) の最小/最大セグメントの削除をサポートするデータベース エンジンのバージョンにアップグレードすると、ALTER INDEX ... REBUILDまたはCREATE INDEX ... WITH (DROP_EXISTING = ON)ステートメントを使用して列ストア インデックスが再構築されるまで、min_deep_dataとmax_deep_dataがNULLされます。
解説
列ストア セグメントのエンコードの種類は、最も低いストレージ コストを実現することを目的としてセグメント データを分析することによって、データベース エンジンによって選択されます。 データがほとんど異なる場合、データベース エンジンでは値ベースのエンコードが使用されます。 データがほとんど異なる場合、データベース エンジンはハッシュベースのエンコードを使用します。 文字列ベースと値ベースのエンコードのどちらを選択するかは、格納されるデータの種類 (文字列データかバイナリ データかに関係なく) に関連します。 可能であれば、すべてのエンコードでビット パッキングと実行長のエンコードが利用されます。
列ストア セグメントの削除は、数値、日付、時刻のデータ型、および小数点以下桁数が 2 以下の datetimeoffset データ型に適用されます。 SQL Server 2022 (16.x) 以降では、セグメントの削除機能は、文字列データ型とバイナリ データ型、 uniqueidentifier データ型、および 2 より大きいスケールの datetimeoffset データ型に拡張されます。 セグメントの削除は、 varchar(max)、 nvarchar(max)、 varbinary(max)などの LOB データ型には適用されません。 詳細については、「 列ストア インデックスの新機能」を参照してください。
アクセス許可
ビューに対する VIEW DEFINITION 権限が必要です。
has_nulls、base_id、magnitude、min_data_id、max_data_id、null_valueなど、ユーザーにもSELECTアクセス許可がない限り、次の列はNULLを返します。
カタログ ビューでのメタデータの可視性は、ユーザーが所有しているか、ユーザーに何らかのアクセス許可が付与されているセキュリティ保護可能なリソースに限定されます。 詳細については、「 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;