インデックススキャン/シークに関する基本的な質問があります。索引スキャンは、フェッチする行が多数ある場合に有効です。つまり、インデックススキャンコストは返される行数に反比例します。これは、より多くのIOをもたらすすべてのページをスキャンする必要があるため、クエリがより高価な行の数が少なくなります。インデックスシークがインデックススキャンよりも高価になる理由
シークがスキャンよりも高価になる理由を検索しましたが、シークが高価になる理由はありません。
私が混乱しているのは、インデックスシークです。索引シークが高価になる理由は、より多くの行数が返されます。索引シークは、行を含むページに直接触れるため、スキャンよりも常に高速かつ効率的です。したがって、返される行数が多い場合でも、インデックス検索はインデックス検索より常に効率的でなければなりません。しかし、これは起こりません。私は正確になぜシークが高価になるのかを知りたい。
select id,name,col1,col2
from TableA -- Will result in index scan. Table has 10000 rows with clustered index on ID column. Query has covering index.
select id,name,col1,col2
where ID between 1 and 10
from TableA -- Optimizer Will use index Seek.
さて、なぜ、以下のクエリはインデックスが強要されたシーク時に高価になってしまうん - クラスタ化インデックスがシークなぜ
select id,name,col1,col2
from TableA with (forceseek)
[こちら](http://blog.sqlauthority.com/2007/03/30/sql-server-index-seek-vs-index-scan-table-scan/)が役立つかもしれません。 – Praveen
シークの修飾オーバーヘッドが原因の可能性があります – Ian
インデックスには何が含まれていますか? IDだけ?それはクラスタ化されたインデックスですか?そうでない場合は、他の列を取得するために必要なキー参照がパフォーマンスヒットの理由になります。 – strickt01