テーブルスキャンはどのように正確に機能しますか?ここでテーブルスキャンでどの列がチェックされていますか?
は、私が知っているものです:
- テーブルスキャンは、テーブル全体を検索します。
- クラスタード・インデックス・スキャンは、その索引で定義されているどの列でも検索します。
のは、私たちはこのシナリオを持っているふりをしてみましょう:
table_a
列:ID、市、国
私はCity
にクラスタ化インデックスを持っています。
私は実行クエリはこれです:
select city
from table_a
where city = 'austin'
実際の質問:このシナリオでは
テーブルスキャンのみ
city
列になりますか、それはIDを確認するだろう、市、国の列。表スキャンで列が1つしか検索されない場合は、表スキャンと索引スキャンで同じパフォーマンスが得られるとはかぎりませんか?
編集パート1:
Google検索は書いた:
をテーブルスキャンが発生するとSQL Serverがメモリにすべての行と列を読み込みます。インデックススキャンが実行されると、インデックス内のすべての行と列のみが読み込まれます。
"クラスタ化インデックススキャンでは、そのインデックスに定義されているどの列も検索します。" - それは間違っています。クラスタ化インデックススキャンはテーブルスキャンです.SQL Serverでは(単一の)クラスタ化インデックスがテーブルであるため、テーブル内のすべてのページにアクセスします。クエリに必要な列だけを調べても、それでもすべてのページが読み込まれます。 –
同じものであれば、名前が違うのはなぜですか?彼らは特定のシナリオでは同じものですか? – LunchBox
「同じことがあれば、なぜ彼らの名前が違うのですか?」 - おそらくマイクロソフトに尋ねなさいもともと、テーブルスキャンという用語は、ヒープとクラスタ化されたテーブルをカバーするために使用されていました。その後、用語は分割されました(AFAIK)。ただし、クラスタ化インデックススキャン==テーブルスキャン。 –