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でクエリの実行計画の表示方法を確認できます。
サイト