考慮下面的SQL Server表:使用羣集與非羣集索引上的大數據在SQL
- 員工(SSN,姓名,部門,經理,薪水)
其中ssn
是首要的關鍵。
假設每個磁盤塊有30個員工記錄。每個員工都屬於其中一個部門。解釋爲什麼你應該或不應該放在一個dept
非聚簇索引,以加快此查詢在以下兩種情況:
SELECT ssn
FROM Employee
WHERE dept = 'IT'
- 時,有50個部門
- 時,有5000個部門
我對SQL Server中的聚簇索引和非聚簇索引的基本理解是,當有大量數據要返回時應該使用聚簇索引,因爲它們最初將按該索引對錶進行排序。因此,我認爲在第二種情況下,如果有5000個部門,則不應該在dept
上放置非聚類索引以加快查詢速度。
我對第一種情況感到困惑,因爲只有50個部門,如果使用非集羣或集羣索引,真的很重要嗎?我認爲這可能很重要的唯一原因是,如果聚類索引需要額外時間來首先對數據進行排序,而非聚類索引則不需要。
在這兩種情況下應該使用哪種聚類或非聚類索引?
在這兩種情況下以及未來,無論有多少數據,我都會在SSN上添加一個集羣,並在該集羣上添加一個非集羣。作爲一項規則,非聚簇索引取決於您的查詢。例如,如果您不在該表中按部門進行搜索,則不應創建它,否則請執行此操作。你不想爲部門有一個單獨的表嗎? – hastrb