考虑下面的SQL Server表:使用群集与非群集索引上的大数据在SQL
- 员工(SSN,姓名,部门,经理,薪水)
其中ssn
是首要的关键。
假设每个磁盘块有30个员工记录。每个员工都属于其中一个部门。解释为什么你应该或不应该放在一个dept
非聚簇索引,以加快此查询在以下两种情况:
SELECT ssn
FROM Employee
WHERE dept = 'IT'
- 时,有50个部门
- 时,有5000个部门
我对SQL Server中的聚簇索引和非聚簇索引的基本理解是,当有大量数据要返回时应该使用聚簇索引,因为它们最初将按该索引对表进行排序。因此,我认为在第二种情况下,如果有5000个部门,则不应该在dept
上放置非聚类索引以加快查询速度。
我对第一种情况感到困惑,因为只有50个部门,如果使用非集群或集群索引,真的很重要吗?我认为这可能很重要的唯一原因是,如果聚类索引需要额外时间来首先对数据进行排序,而非聚类索引则不需要。
在这两种情况下应该使用哪种聚类或非聚类索引?
在这两种情况下以及未来,无论有多少数据,我都会在SSN上添加一个集群,并在该集群上添加一个非集群。作为一项规则,非聚簇索引取决于您的查询。例如,如果您不在该表中按部门进行搜索,则不应创建它,否则请执行此操作。你不想为部门有一个单独的表吗? – hastrb