SQL Server中GUID键和int键的索引如何工作?

时间:2018-09-18 22:09:08

标签: sql-server indexing guid uniqueidentifier

是我一直在用SQL创建实现GUID的表,为此我查看了这个问题:

What are the best practices for using a GUID as a primary key, specifically regarding performance?

以下答案告诉我使用GUID密钥以及另一个密钥,但要使用Identity,这样:

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)

我的问题是:为什么在说我们已经在使用GUID时使用int键?

1 个答案:

答案 0 :(得分:1)

困惑源于答案中“关键”一词的多种含义;机智的答案是:

  

如果要将PKGUID列用作主键(但不   您的群集密钥),另一列MYINT(INT IDENTITY)作为您的   集群键...

我将其改为(更改固定):

  

如果要将PKGUID列用作主键(但不   您的聚集索引),另一列MYINT(INT IDENTITY)作为您的   聚集索引 ...

要点是,默认情况下,PRIMARY KEY位于簇索引上(除非另行指定);然后,将聚簇索引包含在所有其他索引中,在GUID作为聚簇PK的情况下,这可能是重要的性能瓶颈。您发布的代码是一种折衷方案。它满足了“主键” GUID的“需求”,同时可以聚集在较小的列值上(这可以提高性能)。

这不是理想的方法,但是它可能是一种非常有用的方法。如果您想详细了解键和索引之间的区别,请参见以下有用链接:

What is the difference between a primary key and a index key https://itknowledgeexchange.techtarget.com/sql-server/difference-between-an-index-and-a-primary-key/ When should I use primary key or index?