# 画面設計書 8-sp_BlitzIndex 使用詳細画面

## 概要

本ドキュメントは、SQL Server First Responder Kitのsp_BlitzIndexストアドプロシージャを@Mode=2で実行した際に出力される、インデックス使用詳細画面の設計仕様を記載する。

### 本画面の処理概要

sp_BlitzIndex使用詳細画面は、既存インデックスの使用統計詳細を一覧表示する画面である。Excel出力に適した形式で、インデックスごとのシーク回数、スキャン回数、更新回数などの詳細統計を提供する。

**業務上の目的・背景**：インデックスチューニングでは、各インデックスがどのように使用されているかを定量的に把握することが重要である。@Mode=2の使用詳細画面は、全インデックスの使用統計を一覧形式で表示し、使用頻度の低いインデックスや、書き込みが多く読み取りが少ないインデックスを特定できる。Excelへのエクスポートを想定した形式のため、データ分析やレポート作成に適している。@OutputパラメータでSQL Serverテーブルに出力することも可能。

**画面へのアクセス方法**：`EXEC sp_BlitzIndex @Mode = 2`を実行することで使用詳細画面にアクセスする。

**主要な操作・処理内容**：
1. 対象データベースの全インデックス情報を収集
2. sys.dm_db_index_usage_statsからの使用統計を取得
3. インデックスごとの詳細統計を一覧形式で表示
4. @SortOrderパラメータでソート順を制御可能

**画面遷移**：
- この画面から遷移できる画面：sp_BlitzIndex診断結果画面（@Mode=0）
- この画面に遷移してくる画面：sp_BlitzIndex診断結果画面（@Mode=2指定時）

**権限による表示制御**：sp_BlitzIndex診断結果画面と同じ権限要件。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 4 | sp_BlitzIndex | 主機能 | @Mode=2で既存インデックスの使用統計詳細を一覧表示 |

## 画面種別

一覧（インデックス使用統計詳細表示）

## URL/ルーティング

```sql
-- 使用詳細表示
EXEC sp_BlitzIndex @Mode = 2;

-- 特定データベースの使用詳細
EXEC sp_BlitzIndex @Mode = 2, @DatabaseName = 'MyDatabase';

-- ソート順を指定
EXEC sp_BlitzIndex @Mode = 2, @SortOrder = 'reads';

-- テーブル出力
EXEC sp_BlitzIndex
    @Mode = 2,
    @DatabaseName = 'MyDatabase',
    @OutputDatabaseName = 'DBAtools',
    @OutputSchemaName = 'dbo',
    @OutputTableName = 'IndexUsage';
```

## 入出力項目

### 入力パラメータ

sp_BlitzIndex共通のパラメータを使用。@Mode = 2を指定する。

| パラメータ名 | データ型 | デフォルト値 | 説明 |
|-------------|---------|-------------|------|
| @Mode | TINYINT | 0 | 2を指定で使用詳細モード |
| @DatabaseName | NVARCHAR(128) | NULL | 対象データベース |
| @SortOrder | NVARCHAR(50) | NULL | ソート順（reads/writes/rows等） |
| @SortDirection | NVARCHAR(4) | 'DESC' | ソート方向（ASC/DESC） |
| @OutputDatabaseName | NVARCHAR(256) | NULL | 出力先データベース |
| @OutputSchemaName | NVARCHAR(256) | NULL | 出力先スキーマ |
| @OutputTableName | NVARCHAR(261) | NULL | 出力先テーブル |

## 表示項目

### 結果セット

| 列名 | データ型 | 説明 |
|-----|---------|------|
| database_name | NVARCHAR(128) | データベース名 |
| schema_name | NVARCHAR(128) | スキーマ名 |
| object_name | NVARCHAR(128) | テーブル/ビュー名 |
| index_name | NVARCHAR(128) | インデックス名 |
| index_id | INT | インデックスID |
| is_unique | BIT | 一意性フラグ |
| is_primary_key | BIT | 主キーフラグ |
| key_column_names | NVARCHAR(MAX) | キー列名 |
| include_column_names | NVARCHAR(MAX) | 付加列名 |
| filter_definition | NVARCHAR(MAX) | フィルター定義 |
| user_seeks | BIGINT | シーク回数 |
| user_scans | BIGINT | スキャン回数 |
| user_lookups | BIGINT | ルックアップ回数 |
| user_updates | BIGINT | 更新回数 |
| last_user_seek | DATETIME | 最終シーク日時 |
| last_user_scan | DATETIME | 最終スキャン日時 |
| last_user_lookup | DATETIME | 最終ルックアップ日時 |
| last_user_update | DATETIME | 最終更新日時 |
| total_reads | BIGINT | 合計読み取り回数（計算列） |
| reads_per_write | DECIMAL | 書き込みあたり読み取り（計算列） |
| index_usage_summary | NVARCHAR(MAX) | 使用サマリー文字列 |
| total_reserved_MB | DECIMAL | 予約済みサイズ（MB） |
| total_used_MB | DECIMAL | 使用済みサイズ（MB） |
| total_rows | BIGINT | 行数 |

### @SortOrderオプション

| @SortOrder | 説明 |
|-----------|------|
| reads | 合計読み取り回数順 |
| writes | 更新回数順 |
| rows | 行数順 |
| size | サイズ順 |
| NULL | デフォルト順 |

## イベント仕様

### 1-使用詳細生成処理

@Mode=2で実行した場合、以下の処理が実行される：

1. インデックス基本情報を#IndexSanityに収集
2. インデックスサイズ情報を#IndexSanitySizeに収集
3. 使用統計情報を取得
4. @SortOrderに基づきソート
5. 一覧形式で結果を返却

## データベース更新仕様

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| プロシージャ実行 | #IndexSanity | INSERT | インデックス情報を一時格納 |
| 出力テーブル指定時 | @OutputTableName | INSERT | 結果を永続テーブルに保存 |

## メッセージ仕様

sp_BlitzIndex共通のメッセージを参照。

## 例外処理

sp_BlitzIndex共通の例外処理を参照。

## 備考

- @Mode=2はExcel出力に適した形式
- @Outputパラメータで結果をテーブルに永続化可能
- @SortOrder/@SortDirectionでソート制御可能
- @IncludeInactiveIndexes=1で非活動インデックスも含める

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: @Mode=2の処理分岐を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | sp_BlitzIndex.sql | `sp_BlitzIndex.sql` | @Mode判定と分岐処理部分 |
| 1-2 | sp_BlitzIndex.sql | `sp_BlitzIndex.sql` | 行40-41: @SortOrder/@SortDirectionパラメータ |

### プログラム呼び出し階層図

```
sp_BlitzIndex (@Mode = 2)
    │
    ├─ インデックス情報収集
    │      ├─ #IndexSanity
    │      └─ #IndexSanitySize
    │
    ├─ 使用統計取得
    │      └─ sys.dm_db_index_usage_stats
    │
    └─ 結果出力
           ├─ @SortOrderに基づくソート
           └─ 一覧形式で返却
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| sp_BlitzIndex.sql | `sp_BlitzIndex.sql` | ソース | メインプロシージャ定義 |
