在性能方面,在这两种情况下查询非唯一 GUID 上的表是否相同?
情况 1:多列上的主键,而重要列是主键中的第一项
CREATE TABLE xyz (
a uniqueidentifier NOT NULL,
b uniqueidentifier NOT NULL,
c uniqueidentifier NOT NULL,
CONSTRAINT [PK_xyz] PRIMARY KEY (a, b, c) CLUSTERED
)
案例 2:在我将最常用于查询表的列上聚集非唯一索引
CREATE TABLE xyz (
a uniqueidentifier NOT NULL INDEX IX_xyz_a CLUSTERED,
b uniqueidentifier NOT NULL,
c uniqueidentifier NOT NULL,
CONSTRAINT [PK_xyz] PRIMARY KEY (a, b, c)
)
大多数时候我的表会被查询为SELECT ... FROM xyz WHERE a = ...
SELECT 的成本将非常接近。
在这两种情况下,您都将在 BTree 中查找具有该 a 值的第一行,并扫描聚集索引的叶级以查找具有该 a 值的所有其他行。在这两种情况下,a 值的所有行都是连续的。
但是案例 2 会更大,更新速度更慢,因为它有两个索引结构,而不是只有一个。