2016-04-18 53 views
0

從圖中可以看出: Query1和Query2在表和where子句中是相同的。但是,當我從地址表索引添加一個字段從索引掃描到表掃描。我的問題是爲什麼?爲什麼選擇字段會改變索引掃描類型?

注:我看到推薦索引,但我不認爲我有權更改數據庫。

enter image description here

+0

檢查聚簇索引... – Devart

回答

2

這是很有可能發生的事情更多,因爲StateProvCode不在地址表中的PK列,也不是一個包含列。因此,SQL Server必須確定簡單地掃描表,而不是掃描PK,然後在Address表中進行額外的查找以獲取每行的StateProvCode值,這將會更便宜。您的性能可能不會受到太多影響,因爲掃描索引可能只比掃描表格快一點(除非您有適當的過濾索引)。當然,正如你所看到的,你可能需要創建一個索引來真正提高性能。

+0

同意。從某種意義上說,索引是針對特定搜索優化的另一個表。如果所需字段未被該索引覆蓋,則它基本上被加入到它的父表*(過濾索引,加入到表中,獲取字段)*。在這種情況下,優化器決定掃描整個表格會更便宜,而不是使用索引,但會招致加入「加入」的成本。這可能是正確的,但有時並非如此。也許你可以檢查所有相關統計數據是否是最新的?或者也許使用表格提示來強制使用索引並比較成本? – MatBailie

相關問題