SQL Server 2012中的索引

SQL Server 2012中的索引,sql,indexing,sql-server-2012,Sql,Indexing,Sql Server 2012,我的数据库中有一个表,其中hussandPersonid和WifePersonId是另一个名为Person的表的外键,开始/结束日期指婚姻开始和结束的时间 我有一个疑问: SELECT DISTINCT A.WifePersonId FROM Couple A INNER JOIN Couple B ON A.WifePersonId = B.WifePersonId AND A.HusbandPersonId <> B.HusbandPer

我的数据库中有一个表,其中hussandPersonid和WifePersonId是另一个名为Person的表的外键,开始/结束日期指婚姻开始和结束的时间

我有一个疑问:

SELECT
   DISTINCT A.WifePersonId
FROM
   Couple A
   INNER JOIN Couple B
      ON A.WifePersonId = B.WifePersonId
      AND A.HusbandPersonId <> B.HusbandPersonId
      AND A.StartDate < B.EndDate
      AND A.EndDate > B.StartDate;
返回同时与多人结婚的任何妻子

现在我想添加一个索引来提高这个查询的搜索速度

哪一个索引最好?在添加索引之前和之后,查询的执行计划是什么

这是作业中的一个要求,我搜索了太多,但没有找到任何有用的主题


有人能帮上忙吗?

一般索引规则建议在加入条件中包括所有字段。这些字段的顺序可能会产生影响。同样,一般规则建议按每个字段唯一值的基数递增的顺序对字段进行排序

因此,您可以尝试:

CREATE INDEX Couple__multi ON Couple(StartDate, EndDate, WifePersonId, HusbandPersonId)
这假设不同开始/结束日期的数量小于唯一妻子/丈夫个人的数量

这些规则基本上是索引101类型的东西。大多数情况下,它们会让您获得可接受的性能水平。这在很大程度上取决于您的数据和应用程序是否足以满足您的目的

就我个人而言,我对SQL Performance Analyzer建议的索引并没有太多考虑,但我上一次认真研究它们是在SQL2005中。我相信从那以后情况有所改善


希望这能有所帮助。

一般索引规则建议在联接条件中包含所有字段。这些字段的顺序可能会产生影响。同样,一般规则建议按每个字段唯一值的基数递增的顺序对字段进行排序

因此,您可以尝试:

CREATE INDEX Couple__multi ON Couple(StartDate, EndDate, WifePersonId, HusbandPersonId)
这假设不同开始/结束日期的数量小于唯一妻子/丈夫个人的数量

这些规则基本上是索引101类型的东西。大多数情况下,它们会让您获得可接受的性能水平。这在很大程度上取决于您的数据和应用程序是否足以满足您的目的

就我个人而言,我对SQL Performance Analyzer建议的索引并没有太多考虑,但我上一次认真研究它们是在SQL2005中。我相信从那以后情况有所改善


希望这有帮助。

@ErikE你能帮我吗:我真的不知道作业的目的是什么。但是,如果您有一个填充了实际数据量的数据库,并运行查询,系统将建议索引。这些建议应该略知一二,但可以作为一个有用的起点。@ErikE你能帮忙吗:我真的不知道作业的目的是什么。但是,如果您有一个填充了实际数据量的数据库,并运行查询,系统将建议索引。这些建议应该略带保留,但可以作为一个有用的起点。