RDBMSのボトルネックは99%ディスクI/Oにある。CPUや物理メモリに比べて、ハードディスクの速度はかなり遅い。気が遠くなるぐらい遅い。インデックスを効果的に設計すれば劇的にディスクI/Oコストを減らすことができる。 インデックスって何だ?まず簡単に基礎知識。インデックスには、クラスタ化インデックスと非クラスタ化インデックスがある。 大雑把に言えば、クラスタ化インデックスとはレコードデータ自体のディスク上での順序を表す。だから、テーブル毎に一つしか作れない。クラスタ化インデックスの順序が隣接しているという事は、データが物理的に隣接されてディスクに格納されているという事である。 SQL Serverは、データを「ページ」という概念で格納する。I/Oは全てこの8KBのページが最小単位である。レコードをたった一行取得する場合でもページ毎に読み出される。クラスタ化インデックスの順序が近いデータ
![SQL Serverのインデックス設計基準](https://cdn-ak-scissors.b.st-hatena.com/image/square/2bf455619fa18a816b7624b4212c7d298b841263/height=288;version=1;width=512/http%3A%2F%2Flh5.ggpht.com%2F__RaflbxzakA%2FTWk0x1TAx0I%2FAAAAAAAAAQI%2FgxMcPeIhtNI%2Fw1200-h630-p-k-no-nu%2Fcindex_thumb%255B1%255D.png%3Fimgmax%3D800)