sys.sysindexes (Transact-SQL)

更新 : 2005 年 12 月 5 日

現在のデータベース内のインデックスとテーブルごとに 1 行のデータを格納します。XML インデックスはこのビューではサポートされません。パーティション テーブルとパーティション インデックスは、このビューでは完全にはサポートされません。代わりに sys.indexes カタログ ビューを使用してください。

ms190283.note(ja-jp,SQL.90).gif重要 :
この SQL Server 2000 システム テーブルは、下位互換性を保つためにビューとして含まれています。代わりに、現在の SQL Server システム ビューを使用することをお勧めします。対応するシステム ビューを調べるには、「SQL Server 2005 システム ビューへの SQL Server 2000 システム テーブルのマッピング」を参照してください。この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
列名 データ型 説明

id

int

インデックスが属するテーブルの ID。

status

int

内部システム状態情報。

first

binary(6)

最初のページまたはルート ページへのポインタ。

SQL Server バージョン 6.5 以前では、sysindexes.first は常にヒープの先頭、インデックスのリーフ レベルの先頭、または連続した text ページおよび image ページの先頭を参照します。

SQL Server バージョン 7.0 以降では、indid = 0 の場合、sysindexes.first は使用されません。

NULL = indid > 1 の場合、インデックスがパーティション分割されています。

NULL = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

indid

smallint

インデックスの ID。

0 = ヒープ

1 = クラスタ化インデックス

>1 = 非クラスタ化インデックス

root

binary(6)

indid >= 1 の場合、ルート ページへのポインタ。

SQL Server のバージョン 6.5 以前では、indid = 0 の場合、sysindexes.root はヒープの最後のページを参照します。

SQL Server バージョン 7.0 以降では、indid = 0 の場合、sysindexes.root は使用されません。

NULL = indid > 1 の場合、インデックスがパーティション分割されています。

NULL = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

minlen

smallint

最小行サイズ。

keycnt

smallint

キーの数。

groupid

smallint

オブジェクトが作成されたファイル グループ ID。

NULL = indid > 1 の場合、インデックスがパーティション分割されています。

NULL = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

dpages

int

indid = 0 または indid = 1 の場合、使用されているデータ ページ数。

indid > 1 の場合、使用されているインデックス ページ数。

0 = indid > 1 の場合、インデックスがパーティション分割されています。

0 = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

行オーバーフローが発生した場合、正確な結果は生成されません。

reserved

int

indid = 0 または indid = 1 の場合、そのテーブルに設定されているすべてのインデックスとテーブル データに割り当てられているページ数。

indid > 1 の場合、インデックスに割り当てられているページ数。

0 = indid > 1 の場合、インデックスがパーティション分割されています。

0 = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

行オーバーフローが発生した場合、正確な結果は生成されません。

used

int

indid = 0 または indid = 1 の場合、すべてのインデックスとテーブル データに使用されている合計ページ数。

indid > 1 の場合、インデックスで使用されているページ数。

0 = indid > 1 の場合、インデックスがパーティション分割されています。

0 = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

行オーバーフローが発生した場合、正確な結果は生成されません。

rowcnt

bigint

indid = 0 および indid = 1 に基づくデータ レベルの行数。

0 = indid > 1 の場合、インデックスがパーティション分割されています。

0 = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

rowmodctr

int

テーブルの統計情報が前回更新されてから挿入、削除、更新された行の総数。

0 = indid > 1 の場合、インデックスがパーティション分割されています。

0 = indid が 0 または 1 の場合、テーブルがパーティション分割されています。

SQL Server 2005 では、rowmodctr は以前のバージョンと完全には互換性がありません。詳細については、「解説」を参照してください。

xmaxlen

smallint

最大行サイズ。

maxirow

smallint

非リーフ インデックス行の最大サイズ。

SQL Server 2005 では、maxirow は以前のバージョンと完全には互換性がありません。

OrigFillFactor

tinyint

インデックスを作成する時に使用された、元の FILL FACTOR 値。この値は保持されませんが、インデックスを再作成するとき、使用された FILL FACTOR 値を確認する場合に利用できます。

StatVersion

tinyint

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

0 を返します。

reserved2

int

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

0 を返します。

FirstIAM

binary(6)

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

NULL = インデックスがパーティション分割されています。

impid

smallint

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。 インデックス実装フラグ。

0 を返します。

lockflags

smallint

インデックスのロック粒度を適切に保つために使用します。たとえば、ロック コストを最小限にするには、基本的に読み取り専用の参照テーブルで、テーブル レベルのロックだけを行うように設定します。

pgmodctr

int

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

0 を返します。

keys

varbinary(816)

インデックス キーを構成する列の列 ID の一覧。

NULL を返します。

インデックス キー列を表示するには、sys.sysindexkeys (Transact-SQL) を使用します。

name

sysname

インデックスまたは統計の名前。indid = 0 の場合、NULL を返します。アプリケーションを変更して、NULL ヒープ名を検索するようにしてください。

statblob

image

統計バイナリ ラージ オブジェクト (BLOB)。

NULL を返します。

maxlen

int

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

rows

int

indid = 0 および indid = 1 に基づくデータ レベルの行数。indid >1 の場合、値は繰り返されます。

解説

予約済みとして定義されている列は使用しないでください。

以前のバージョンの SQL Server では、各テーブルに textntext、または image 型の列が少なくとも 1 つ含まれている場合は、sysindexes の行では indid = 255 になっていました。SQL Server 2005 では、このインデックス ID は存在しません。テーブルまたはインデックスに 1 つ以上のラージ オブジェクト (LOB) データ型が含まれている場合、そのデータの記憶域を管理するために、パーティションごとに 1 つの LOB_DATA アロケーション ユニットが割り当てられます。詳細については、「テーブルとインデックスの編成」を参照してください。

dpagesreserved、および used では、テーブルまたはインデックスのデータが ROW_OVERFLOW アロケーション ユニット内にある場合、正確なデータは返されません。また、各インデックスのページ数は個別に追跡され、ベース テーブル用に集計されることはありません。ページ数を確認するには、sys.allocation_units または sys.partitions ダイアログ ビューを使用するか、sys.dm_db_partition_stats 動的管理ビューを使用します。

以前のバージョンの SQL Server では、データベース エンジンによって行レベルの変更カウンタが管理されていました。SQL Server 2005 では、このカウンタは列レベルで管理されます。このため、rowmodctr 列に対しては計算が行われ、以前のバージョンと同様の結果が生成されますが、正確ではありません。

rowmodctr の値を使用して、統計を更新するタイミングを決定する場合は、次の方法を検討してください。

  • 何もしない。新しい rowmodctr 値の動作は、以前のバージョンとほぼ同じであるため、通常は、統計を更新するタイミングの特定に役立ちます。
  • AUTO_UPDATE_STATISTICS を使用する。詳細については、「インデックス統計」を参照してください。
  • 期限を使用して、統計を更新するタイミングを決定する。たとえば、毎時、毎日、毎週などです。
  • アプリケーション レベルの情報を使用して、統計を更新するタイミングを決定する。たとえば、identity 列の最大値が 10,000 以上に変更されるとき、または一括挿入操作が実行されるときなどを目安にします。

参照

関連項目

カタログ ビュー (Transact-SQL)
SQL Server 2000 システム テーブルから SQL Server 2005 システム ビューへのマッピング
sys.indexes (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

変更内容
  • dpagesreservedusedrowcntrowmodctr 列のテーブルとインデックスがパーティション分割されている場合の戻り値を、NULL から 0 に変更。
  • FirstIAM で返される結果を修正。