SQL ServerにおけるTable Scan
, Index Scan
, Index Seek
の速度の違いは、データへのアクセス方法に起因します。
Table Scan
はテーブル全体を読み込むため最も遅く、Index Seek
はインデックスを利用して必要なデータのみを読み込むため最も高速です。
Index Scan
はインデックスをスキャンしますが、Table Scan
よりは高速です。
Table Scan
:
テーブルの全データを読み込むため、最も遅いアクセス方法です。
インデックスが利用できない場合や、テーブル全体を検索する場合に発生します。
データ量が増えるほど、読み込み時間も増加します。
Index Scan
:
インデックスをスキャンしますが、Table Scan
よりは高速です。
インデックスが利用できるものの、WHERE句でインデックス列全体を検索する場合などに発生します。
データ量が増えるほど、読み込み時間も増加します。
Index Seek
:
インデックスを利用して、必要なデータのみを効率的に読み込むため、最も高速なアクセス方法です。
WHERE句でインデックス列を特定の値で検索する場合などに発生します。
データ量が増加しても、読み込み時間はほぼ一定です。
例:
例えば、UsersテーブルにUserIDとNameのインデックスがある場合、SELECT * FROM Users WHERE UserID = 100;
というクエリは、Index Seekで高速に実行されます。
一方、SELECT * FROM Users WHERE Name LIKE '%田中%';
というクエリは、インデックスが利用できるものの、中間一致検索のためIndex Scanで実行される可能性があります。
さらに、SELECT * FROM Users;
というクエリは、Table Scanで実行される可能性が高いです。
まとめ:
Index Seek:最も高速。インデックスを利用して必要なデータのみを検索。
Index Scan:Index Seekよりは遅い。インデックスをスキャンする。
Table Scan:最も遅い。テーブル全体を検索。
クエリの実行計画を確認することで、どのアクセス方法が使用されているかを確認できます。Microsoft Learnでクエリの実行計画の表示方法を確認できます。
サイト