复合索引:列的顺序是否在sql server / linq中重要到sql?

时间:2012-02-14 23:28:01

标签: asp.net sql-server linq-to-sql

我在visual studio中,希望在几个表的2列上创建一个复合索引。共有2列:UserID位于所有表中并充当外键;那么,每个表都有自己的键来引用对象的各个部分,比如电话,地址......就像这样:

TablePhones:
PhoneID  | UserID | PhonePrefix | PhoneNumber | PhoneExtention

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

请注意,用户可以拥有多个地址和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上创建复合索引。数据库中列的顺序是否正常,或者我应该将UserID移动到所有表的第一个位置。

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

表格中的列顺序无关紧要;至少对于SQLServer。重要的是在索引中列出了哪些订单字段。有关前导列[s]条件的查询将从索引中获益。

如果主键是群集的,则只能在userID创建索引,不需要复合键。无论如何,它将引用聚簇键。