我的数据库中有这个表,HusbandPersonId
和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;
返回任何同时与多人结婚的妻子。
现在我想添加一个索引来提高搜索查询的速度。
哪个索引最好,在添加索引之前和之后查询的执行计划是什么?
这是家庭作业的要求,我搜索的太多,但我找不到任何有用的话题
有人可以为此提供帮助吗?
答案 0 :(得分:1)
一般索引规则建议在您的连接条件中包含所有字段。这些字段的顺序可能会产生影响。同样,一般规则建议按照基数增加的顺序排序字段(每个字段的唯一值的数量)。
所以你可以试试:
CREATE INDEX Couple__multi ON Couple(StartDate, EndDate, WifePersonId, HusbandPersonId)
这假定不同的开始/结束日期的数量小于独特的妻子/丈夫的人数。
这些规则基本上是索引101类型的东西。大多数时候,他们会为您提供可接受的性能水平。如果这足以满足您的需要,它在很大程度上取决于您的数据和应用程序。
就个人而言,我没有考虑SQL Performance Analyzer建议的索引,但我最后在SQL2005中仔细研究过它们。我确信自那以后有一些进步。
希望这有帮助。