インデックス

SQLServer【Index編】#S1_02_インデックスとは?

インデックスとは,データベースの値を高速に見つけてくるための機能です。SQLServerに限らず,オラクルなどのデータベースでも同様にインデックスという機能が存在します。

データベースとは「データ」の「ベース」です。「ベース」っていうのは,「ベースキャンプ」とか言うように,データの集まりなので,大量にデータが存在する可能性があります。

SQLServerのGUIのツールなのでデータを見ると,テーブルの値は一覧表で表示されるので,テーブルのデータというのは,1つのファイルに順番通りに入っているように見えるかもしれませんが,実際には8キロバイトの小さなファイルの集まりになっています。

例えば1つの顧客情報テーブルのデータが10万ファイルに分かれて格納されている場合に,その中から「小野」という名前のデータだけを探す場合,何の決め事もなく10万ファイルに顧客情報を格納している場合は,その10万ファイルをすべて読まないと,「小野」が何人いるかわかりません。だからすべてを読んで「小野」は3人でしたって感じで検索結果を返すことになります。検索を1回やるたびにこんなことをやっていたら,非常に効率が悪いし,時間が大量にかかってしまいますよね。

だから,とある決め事の順番で並べておいて,すぐにデータを探してくる方法がインデックスという機能です。

辞書の索引と同じ考え方です。索引があれば索引を見て,何ページに調べたい言葉があるかが,すぐにわかりますよね。言葉が一定の規則に沿って索引がない場合,毎回辞書を全部読まないと,調べたいことが書いているかどうかもわからないし,書いているとしても何ページに書いているかわからなかったら大変ですよね。だから,大量のデータを規則的にならべて,辞書の索引のような感じで対象データの所在を高速に探すためにインデックスは存在しています。

インデックスの必要性

インデックスは大量のデータから,検索結果を高速に見つけ出すために必要な機能ですが,そもそも検索対象が少ない場合はインデックスが無くても問題ありません。例えば1000件程度しかテーブルにないのであれば,インデックスが無くても,データを1秒未満取得できるでしょう。これが10000件くらい以上になってくると,インデックスなしでは,検索結果に差が出てきます。

SQLServerインデックスを理解して検索を高速にする方法

#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_インデックスの注意点
おわりに

参考図書

SQL

SQL Server 2016の教科書 開発編

SQL Server Transact-SQLプログラミング 実践開発ガイド

SQLクックブック 第2版 ―データベースエキスパート、データサイエンティストのための実践レシピ集

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

SQL Server 2016データベース構築・管理ガイド Enterprise対応

設計

達人に学ぶDB設計 徹底指南書

内部構造

絵で見てわかるSQL Serverの仕組み

アドバンストMS SQL SERVER 2008 構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)