お勉強の内容を記憶に残すためにメモをば。
インデックスって何なの?
参考記事
とてもわかりやすい。こっちを見よう↓
SQL Serverのインデックスの理解を深める - Qiita
インデックスのイメージ
カラムに索引番号をつける
↓
索引順に並べ替える
↓
並べ替えたデータを索引番号「1~100」「101~200」「201-300」のようにまとめる
↓
まとめたデータを木構造にする
↓
高速検索!
例:下記のテーブルにインデックスを貼る
CREATE CLUSTERED INDEX [IX_Table1_tenpo_cd] ON [Table1] ([tenpo_cd] ASC) GO
クラスター化インデックス
木構造の中に実データが入っていて直接アクセスする。
非クラスター化インデックス
木構造の中にはキー値だけが入っていて実データはなし。
検索結果をもとに実データにアクセスする。
エクステント(データ管理の単位)
メモリ領域を効率的に使用するための仕組み。
容量変更が難しいブロックをエクステントで管理して、可変的に扱う。
- ブロック≒ページ:メモリー管理の単位。4KBが標準。ハードウェアに規定されていて変更できない。
- エクステント:ページの上位単位。使用ブロック数の情報を保持。
以下、ざっくり解説
ブロックには1個1個管理情報が必要
↓
1TBみたいな大容量データを扱うにも全ブロックに管理情報が必要で、管理情報でメモリー消費する
↓
じゃあ1個のブロック容量を大きくしよう
↓
そうすると小さいデータを扱うときに無駄が大きくなる(T_T)
↓
せや!エクステントでまとめて複数ブロックの管理情報を扱おう!
↓
データが小さいときは1エクステント1ブロックで、大容量のときは1エクステント1000ブロックみたいにすれば、管理情報も減らせるし、ブロックサイズを変更しないで済むやで。
・参考サイト
Viewって何なの?
SELECT文を保存したもの。
実はSELECT結果は保存してなくて、毎回SELECT文を実行している。
でも、Viewに対してUPDATEなどの更新をかけることはできる。
Viewを更新すると元テーブルにも更新がかかる。