索引在SQL Server 2012中

时间:2013-01-02 23:40:59

标签: sql indexing sql-server-2012

enter image description here

我的数据库中有这个表,HusbandPersonIdWifePersonId是另一个名为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;

返回任何同时与多人结婚的妻子。

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

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

这是家庭作业的要求,我搜索的太多,但我找不到任何有用的话题

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:1)

一般索引规则建议在您的连接条件中包含所有字段。这些字段的顺序可能会产生影响。同样,一般规则建议按照基数增加的顺序排序字段(每个字段的唯一值的数量)。

所以你可以试试:

CREATE INDEX Couple__multi ON Couple(StartDate, EndDate, WifePersonId, HusbandPersonId)

这假定不同的开始/结束日期的数量小于独特的妻子/丈夫的人数。

这些规则基本上是索引101类型的东西。大多数时候,他们会为您提供可接受的性能水平。如果这足以满足您的需要,它在很大程度上取决于您的数据和应用程序。

就个人而言,我没有考虑SQL Performance Analyzer建议的索引,但我最后在SQL2005中仔细研究过它们。我确信自那以后有一些进步。

希望这有帮助。