Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 复合索引:在sql server/linq to sql中,列的顺序重要吗?_Asp.net_Sql Server_Linq To Sql - Fatal编程技术网

Asp.net 复合索引:在sql server/linq to sql中,列的顺序重要吗?

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

我在VisualStudio中,希望为几个表在两列上创建一个复合索引。共有2列:UserID位于所有表中,充当外键;然后,每个表都有自己的键来引用对象的各个部分,例如电话、地址。。。像这样:

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子句中列的顺序也很重要吗?