2017-07-25 124 views
0

如果我有這樣的查詢:爲什麼QO選擇聚簇索引掃描與表掃描?

SELECT * FROM tTable 

其中tTable不包含表掃描發生,如預期的任何索引。如果我在某列上添加聚簇索引,則QO決定在此查詢上使用聚簇索引掃描。爲什麼?爲什麼在這種情況下聚簇索引掃描首選而不是表掃描?

回答

0

如果我的一些列中添加一個聚集索引,然後QO決定使用聚集索引掃描此查詢

因爲當你創建一個表上的聚簇索引,表中數據以指數重排order..so表它自己是聚簇索引。這也是爲什麼你不能在同一個表上有兩個聚簇索引的原因。

總之,當你創建一個聚簇索引時,只有一個結構,而不是兩個(聚集索引和表)

0

查詢是「給我所有行和所有列」,這意味着「讀取每行」這是一個掃描

索引查找沒有什麼可做的,因爲沒有WHERE子句。 與此不同:

SELECT * FROM tTable WHERE PrimaryClusteredKeyValue = 45 

那麼這可能使用一個非聚集尋求後跟一個聚集鍵查找或它可能仍然掃描聚集索引,因爲你要的所有列。這取決於gbn將匹配多少行

SELECT * FROM tTable WHERE NonClusteredOtherColumnValue = 'gbn' 
相關問題