※ 引述《BigLoser (大魯蛇)》之銘言:
: 最近看了一個mssql 2012的資料庫,
: 索引的報表裡面有一個index,被index scan的機率還不低,
: 而且這個table沒有做PK,不過這個index有設唯一,
: 網路上看到說,如果你的PK被index scan那狀況就是table scan,
: 那我現在這個狀況也是table scan嗎?
: 需要改善查詢語法嗎?
: 謝謝喔
透過 SSMS 內建立 Primary Key 預設就是 Clustered Index,
根據有沒有 Clustered Index 可以把 Table 分為兩種架構,
1. 沒有 Clustered Index 的架構 - Heap,會是 Table Scan
2. 有 Clustered Index 的架構 - B-Tree,會是 Index Scan
建立一個 Table,透過執行計畫就可以觀察到有沒有 Clustered Index 的 Scan 模式
通常會建議要建立 Clustered Index,假如沒有明確的 Primary Key 欄位,
可以建立一個 identity 或 Sequence 欄位來當 Primary Key
這一點可以 Google "sql heap vs clustered index" 可以找到參考資料
個人意見:Index Scan 或 Table Scan 應該不是重點,
重點是 Scan 代表 T-SQL 並沒有充分發揮索引