0

我正在使用 SQL Server 2012。索引单个非聚集非键列和放置多个列然后索引之间有什么区别?

如果我有桌子

  • 员工ID
  • 部门编号
  • 位置 ID
  • 姓名
  • 地址

如果我在

  • 员工ID
  • 部门编号

而不仅仅是

  • 员工ID

有什么不同?我创建了EmployeeID, DepartmentID索引,当我使用 搜索任何员工时DepartmentID = X,SQL Management Studio 实际执行计划建议我创建一个索引,DepartmentID即使表上有一个非聚集索引EmployeeID, DeparmentID

4

3 回答 3

0

一个区别是列顺序。

如果您有一个索引(EmployeeID, DepartmentID)并且您的查询仅过滤器DepartmentID,则不会使用该索引。索引从左到右工作。

另一个考虑因素是空间和性能。UPDATE索引越宽,执行、DELETE或时刷新的时间就越长INSERT

于 2012-11-08T19:55:36.893 回答
0

在索引中,顺序很重要。您希望首先拥有最大的子集,然后是较小的子集。因此,您可能会寻找属于某个部门的员工,而不是寻找特定员工的部门。换句话说,每个部门的员工数量可能多于每个员工的部门数量——或者至少,搜索的结果可能首先是按部门分组的。

因此,如果您将单个索引从 更改为EmployeeID+DepartmentIDDepartmentID+EmployeeID您可能会看到该建议消失。

更多阅读:http ://weblogs.sqlteam.com/joew/archive/2008/02/13/60510.aspx

于 2012-11-08T19:56:49.260 回答
0

您可以单独使用多列索引的前导部分进行搜索,但不能使用尾随部分。

如果您在 EmployeeID、DepartmentID 上有一个索引,则可以使用它来按 EmployeeID 搜索,或者同时搜索 EmployeeID 和 DepartmentID,但如果不指定 EmployeeID,它就不能用于搜索 DepartmentID。无论索引是否聚集,这都是相同的。

如果要单独搜索 DepartmentID 或 EmployeeID,请创建两个单独的索引。

于 2012-11-08T19:56:57.470 回答