2017-12-25 6 views
-1

テーブルスキャンはどのように正確に機能しますか?ここでテーブルスキャンでどの列がチェックされていますか?

は、私が知っているものです:

  • テーブルスキャンは、テーブル全体を検索します。
  • クラスタード・インデックス・スキャンは、その索引で定義されているどの列でも検索します。

のは、私たちはこのシナリオを持っているふりをしてみましょう:

table_a

列:ID、市、国

私はCityにクラスタ化インデックスを持っています。

私は実行クエリはこれです:

select city 
from table_a 
where city = 'austin' 

実際の質問:このシナリオでは

  1. テーブルスキャンのみcity列になりますか、それはIDを確認するだろう、市、国の列。

  2. 表スキャンで列が1つしか検索されない場合は、表スキャンと索引スキャンで同じパフォーマンスが得られるとはかぎりませんか?

編集パート1:

Google検索は書いた:

をテーブルスキャンが発生するとSQL Serverがメモリにすべての行と列を読み込みます。インデックススキャンが実行されると、インデックス内のすべての行と列のみが読み込まれます。

+1

"クラスタ化インデックススキャンでは、そのインデックスに定義されているどの列も検索します。" - それは間違っています。クラスタ化インデックススキャンはテーブルスキャンです.SQL Serverでは(単一の)クラスタ化インデックスがテーブルであるため、テーブル内のすべてのページにアクセスします。クエリに必要な列だけを調べても、それでもすべてのページが読み込まれます。 –

+0

同じものであれば、名前が違うのはなぜですか?彼らは特定のシナリオでは同じものですか? – LunchBox

+1

「同じことがあれば、なぜ彼らの名前が違うのですか?」 - おそらくマイクロソフトに尋ねなさいもともと、テーブルスキャンという用語は、ヒープとクラスタ化されたテーブルをカバーするために使用されていました。その後、用語は分割されました(AFAIK)。ただし、クラスタ化インデックススキャン==テーブルスキャン。 –

答えて

0

実行計画を見てください。私はクラスター化されたインデックスシークは、指定された都市のそれらの行だけが触れるように期待します。索引付けされていない列を検索すると、クラスタード・インデックス・スキャンが実行され、すべての行にアクセスできますが、修飾行のみが戻されます。

クエリに必要な列のみが行から抽出され、余分な列はスキャンまたはシーク操作中に検査されません。

関連する問題