复合主键和附加索引

HCL*_*HCL 12 sql-server sql-server-2005

在SQL Server 2005中,我有一个包含两列的表:parent_id (int)child id (int).我想要制作它们的复合键,因为我只希望表中每个可能的组合只有一个实例.

大多数搜索操作将在parent_id现场完成,一些child_id在两个领域上只有零星的搜索操作.

我已经计划在parent_id场上制作一个索引,也许还有一个在child_id场上.这是有意义的还是SQL Server 2005能够在一列(主要是parent_id)列上使用聚簇复合主键进行索引查找,因此索引不是必需/可有可无的?

Joe*_*lli 17

使复合主键(parent_id,child_id)强制实施唯一性.SQL Server可以仅在列或parent_id上使用复合搜索,但不能仅将其用于对child_id的搜索.如果需要,必须在child_id上创建单独的索引.

  • 这个答案就在这里http://stackoverflow.com/a/389545/3569421非常有用,并帮助我澄清了这个概念!重要的一点是:PARENT是复合键中的第一列,而CHILD是复合键中的第二列(第三,第四......)! (3认同)
  • @mark1234:把它想象成一个链条。除非您首先通过 ParentID 级别,否则您无法达到 ChildID 级别。这就是仅 ChildID 上的索引不能使用索引的原因。查询中没有 ParentID 过滤器可以让您找到该 ChildID。 (2认同)