Asp.net 复合索引:在sql server/linq to sql中,列的顺序重要吗?
我在VisualStudio中,希望为几个表在两列上创建一个复合索引。共有2列:UserID位于所有表中,充当外键;然后,每个表都有自己的键来引用对象的各个部分,例如电话、地址。。。像这样:Asp.net 复合索引:在sql server/linq to sql中,列的顺序重要吗?,asp.net,sql-server,linq-to-sql,Asp.net,Sql Server,Linq To Sql,我在VisualStudio中,希望为几个表在两列上创建一个复合索引。共有2列:UserID位于所有表中,充当外键;然后,每个表都有自己的键来引用对象的各个部分,例如电话、地址。。。像这样: TablePhones: PhoneID | UserID | PhonePrefix | PhoneNumber | PhoneExtention TableAddresses: AddressID | UserID | AddressStreet1 | AddressStreet2 | Addres
TablePhones:
PhoneID | UserID | PhonePrefix | PhoneNumber | PhoneExtention
TableAddresses:
AddressID | UserID | AddressStreet1 | AddressStreet2 | AddressCity...
请注意,用户可以有多个地址和多个电话号码。
我使用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移动到所有表的第一个位置
感谢您的建议。表中列的顺序无关紧要;至少对于SQLServer。重要的是索引中列出的顺序字段。在前导列上带有条件的查询将从索引中受益匪浅
如果您的主键是集群的,那么您可以仅在
用户ID
上创建索引,而不需要复合键。无论如何,它将引用集群密钥。如果UserID不是唯一的怎么办?这是主键的问题吗?我不太明白你的意思。您说您已经有了主键。如果您正在考虑重新设计表结构,并使用复合主键,请考虑以下几点:如果您需要在另一个表中引用这些表中的记录,最好在(userId,PhoneId)和(userId,AddressId)上创建代理PK和唯一约束与使用复合PKYes相比,主键当前位于AddressID和PhoneID上,这是唯一的。WHERE子句中列的顺序也很重要吗?