今回はクラスター化インデックスについて解説していきます。
現状はIdにのみ非クラスター化インデックスを作成しているので,CreateDateなど他の項目で検索すると,TableScanになります。今回はそのCreateDateにクラスター化インデックスを作成してみたいと思います。
クラスター化インデックスの作成
インデックスフォルダーを右クリックし,「新しいインデックス」から「クラスター化インデックス」を選択します。
インデックス名を「ClusteredIndex-CreateDate」としておきます。
「追加」ボタンを押下します。
「CreateDate」にチェックを入れて「OK」ボタンを押下します。
「CreateDate」の行が挿入されたことを確認し,「OK」ボタンを押下します。
クラスター化インデックスは作成に時間がかかります。
数分かかるかもしれませんが,クラスター化インデックスが作成されます。
CreateDate指定で検索を実行
クラスター化インデックスが生成されたら,もう一度,次のSQLを実行します。
1 2 3 4 |
DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE select * from Shain where CreateDate = '2010-07-23 12:19:45.000' |
前回実行したときは12秒ほどかかっていましたが,1秒未満で取得ができるようになります。
実行プランの確認
インデックスが無い状態で実行したときはTableScanになっていましたが,今回はどのようになっているか確認してみましょう。
今回は「クラスター化インデックスシーク」になっています。
なぜかこれはカタカナになっていますが,非クラスター化インデックスの時のIndexSeekと同じでこれもSeekなので,クラスター化インデックスがうまく機能して,ピンポイントでデータが見つけられたという意味になります。
次回はクラスター化インデックスの内部構造を解説します。
C#を正しい3層構造で造れてますか?
無料動画コース「C#のアーキテクチャー」(80分)をプレゼントしています
#S1_01_はじめに
#S1_02_インデックスとは
#S1_03_インデックスの有無実演
#S1_04_SQLServerのインストール
#S2_01_データベースとテーブルの作成
#S2_02_データの作成
#S2_03_全件検索
#S2_04_キャッシュとは
#S2_05_検索条件ありで検索
#S2_06_テーブルスキャンとは
#S2_07_インデックスの種類
#S2_08_非クラスター化インデックスの作成
#S2_09_非クラスター化インデックスの内部構造
#S2_10_インデックスのない列の検索とインデックスの有効化無効化
#S2_11_クラスター化インデックスの作成
#S2_12_クラスター化インデックスの内部構造
#S2_13_クラスター化インデックスの検索
#S2_14_インデックスの検索補足
#S2_15_付加列インデックス
#S2_16_プライマリキーとユニークキー
#S2_17_インデックス作成手順
#S2_18_インデックスの注意点
おわりに