SQL Server:优化约束,以基于2列执行查询

时间:2016-03-25 10:16:24

标签: sql-server

我正在使用以下架构创建一个表Brands

UserId
CarId
Brand
  • UserId引用id表中用户的user
  • CarId引用id
  • 中汽车的car

我将使用的唯一查询是基于这两列的搜索,以获得相应的品牌。

所以我的问题是关于约束部分,因为我是初学者,我想知道使用哪种类型的约束(索引,主键,聚簇或非聚簇,在每个字段或2个字段上)让我的查询更加优化。

这是我的剧本:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Brands]') AND type in (N'U'))
BEGIN
    CREATE TABLE [Brands]
    (
        UserId BIGINT NOT NULL
            CONSTRAINT [FK_Brands_Users] 
            FOREIGN KEY REFERENCES [Users] (UserId),
        CarId BIGINT NOT NULL
            CONSTRAINT [FK_Brands_Cars] 
            FOREIGN KEY REFERENCES [Cars] (CarId),
        Brand nvarchar(15),             
    );
END
GO

ALTER TABLE [Brands]
ADD CONSTRAINT [Unique_UserId_BrandId] UNIQUE(UserId, BrandId);
GO

1 个答案:

答案 0 :(得分:0)

我会创建一个包含两个字段的主键。定义主键时,它会自动创建聚簇索引。你的主键也有一个独特的约束内置。你的表现在是一个堆,就像你在上面写的那样,这是不好的。您还可以在CarId上创建额外的非聚集索引。我认为在UserId上有一个额外的非聚集索引是没用的。 UserId列可以使用聚簇索引,因为它是聚簇索引中的第一个字段,但我不确定。