2013-01-02 84 views
1

enter image description here指數在SQL Server 2012中

我這個表我的數據庫,在那裏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; 

,可返回在同一時間結婚,不止一個人任何的妻子。

現在我想添加一個索引來提高搜索這個查詢的速度。

哪個索引最好,索引添加前後查詢的執行計劃是什麼?

這是功課的要求和我搜索了太多,但我沒有發現任何有用的話題

任何人都可以在這方面的幫助?

+0

@ErikE你能幫忙嗎:D –

+0

不知道作業的目的是什麼,真的。但是,如果你有一個填充了實際數據量的數據庫,並運行查詢,系統將*建議*索引。這些建議應該用少許鹽來提出,但可以成爲一個有用的起點。 –

回答

1

一般索引規則建議在連接條件中包含所有字段。這些字段的順序可能會有影響。同樣,一般規則建議按增加基數的順序排序字段(每個字段的唯一值的數量)。

所以,你可以嘗試:

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

這假定不同的開始/結束日期的#小於獨特的妻子/丈夫PersonIds數量。

這些規則基本上是索引101類型的東西。大多數時候他們會讓你達到可以接受的水平。如果這足以滿足您的需求,它將高度依賴您的數據和應用程序。我個人並沒有想太多的SQL性能分析器建議的索引,但我最後在SQL2005中認真看待它們。我確信自那以後有了一些改進。

希望這會有所幫助。