是我一直在用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键?
答案 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?