Sql server 唯一标识符主键非聚集

Sql server 唯一标识符主键非聚集,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我只是偶然发现。假设我实施了marc_的建议: CREATE TABLE dbo.MyTable (PKGUID UNIQUEIDENTIFIER NOT NULL, MyINT INT IDENTITY(1,1) NOT NULL, .... add more columns as needed ...... ) ALTER TABLE dbo.MyTable ADD CONSTRAINT PK_MyTable PRIMARY KEY NONCLUSTERED (PKGUID) CRE

我只是偶然发现。假设我实施了marc_的建议:

CREATE TABLE dbo.MyTable
(PKGUID UNIQUEIDENTIFIER NOT NULL,
 MyINT INT IDENTITY(1,1) NOT NULL,
 .... add more columns as needed ...... )

ALTER TABLE dbo.MyTable
ADD CONSTRAINT PK_MyTable
PRIMARY KEY NONCLUSTERED (PKGUID)

CREATE UNIQUE CLUSTERED INDEX CIX_MyTable ON dbo.MyTable(MyINT)
因此,我会在任何联接表中始终使用MyINT作为外键吗

附言:


我想答案是肯定的,但我不是百分之百肯定。

使用聚集索引作为外键应该会加快连接速度

但是您也可以为GUID列编制索引并将其用于联接,尽管性能可能会稍差一些


如果GUID为您提供了额外的信息(可能您使用的不是随机GUID而是电子邮件地址?),那么您也必须考虑,在这种情况下,将它们用作外键而不是随机数可能还有其他好处。例如,在某些查询中,您甚至可能不需要连接到主表来执行筛选,因为您现在可以预先设置GUID。

是,如果您在外键约束或连接条件中指定MyInt作为引用列。这是因为MyINT是索引的键,SQL Server可以直接搜索。

但请注意,索引GUID列(除非使用squential ID)会导致极端的索引碎片。。。所以“性能推动”将非常低。。。我只会将GUID用于非常特殊的需要,例如错位的数据插入、复制。。。