インデックス

SQLServer【Index編】#S2_06_テーブルスキャンとは

前回は検索条件ありで検索したのに,全件検索と同じだけ時間がかかり,「実行プラン」で確認すると,TableScanになっていた,というところまでお話しました。

テーブルスキャンとは

テーブルスキャンとは端から端までデータを読み込むことです。社員テーブルには5万件入っているので,「5万件読みました」というのがテーブルスキャンです。

だから,検索結果が1行だろうと5万件だろうと,同じだけ時間がかかります。

なぜ全部読み込むのか?

なぜ全部読み込むのかというと,「社員テーブル」の「Id」には1から50000までのIdを振っていますが,別に重複を不可にしているわけではないので,1行目に「Id=1」のデータが見つかったからといって,そこで検索を止めることはしないで,まだ「Id=1」のデータがあるかもしれないので,次の行も読み込みます。そうやって5万行目まで読み込み,結果的に「Id=1」のデータは1行しかないことがそこで初めてわかり,結果に1行だけ表示されているという事です。結局テーブルスキャンになっているという事です。

インデックスの必要性

インデックスとは,「Id」などの項目の値を,昇順などの順番に並べるという事です。今回のケースでも「Id順」になっていることが分かっていれば,「1」の次に「2」が来た時点で検索を完了できます。たとえ「1」「1」「1」「3」と「1」が複数あった場合も1よりも大きい数字が見つかった時点で検索を終了できるので,検索は各段に速くなります。

次回からは,テーブルスキャンにならないように,インデックスを作成した検索を行っていきます。

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 構築・管理 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)