2012-02-14 89 views
0

我在Visual Studio中,正在爲幾個表創建一個2列的組合索引。有2列:用戶ID在所有表中並充當外鍵;然後,每個表都有自己的密鑰來指代對象的部位,如電話,地址...就像這樣:複合索引:列的順序是否在sql server/linq到sql?

TablePhones: 
PhoneID | UserID | PhonePrefix | PhoneNumber | PhoneExtention 

TableAddresses: 
AddressID | UserID | AddressStreet1 | AddressStreet2 | AddressCity... 

注意,用戶可以有超過1個地址和1個多手機數。

我使用LINQ to SQL和where子句查詢得到的對象是這樣的:

read queries: 
where x.UserID == TheUserID 

update/delete queries: 
where x.UserID == TheUserID && x.PhoneID = ThePhoneID 

目前,主鍵是PhoneID和AddressID和我期待在PhoneID/UserID和AddressID/UserID上創建複合索引。數據庫中列的順序是否正常,或者是否應該將用戶ID移動到所有表的第一位。

感謝您的建議。

回答

2

表中列的順序無關緊要;至少對於SQLServer而言。重要的是哪些訂單字段在索引中列出。具有領先專欄條件的查詢將非常有利於索引。

如果你的主鍵是聚簇的,你可以只在userID上創建索引,不需要複合鍵。無論如何,它都會引用聚簇密鑰。

+0

如果UserID不唯一?這是主鍵問題嗎? – frenchie 2012-02-15 00:12:05

+0

我不確定我是否理解你的權利。你說你已經有一個主鍵。 – a1ex07 2012-02-15 00:18:30

+0

如果您正在考慮重新設計表結構並使用複合主鍵,請考慮以下事項:如果您需要從另一個表中的這些表中引用記錄,則最好在(userId, PhoneId)和(UserId,AddressId)比擁有一個複合PK – a1ex07 2012-02-15 00:21:38