【发布时间】:2014-01-31 08:57:23
【问题描述】:
我有一个包含ProductTypeID, BrandID, SupportedBatteryID 列的表,其中存储了特定产品支持的batteryIDs。
这里的列都不是唯一的,那么我需要在这类表上使用主键吗?
如果我要添加一个主键,它会在使用产品 ID 搜索特定产品的电池时提高性能吗?
【问题讨论】:
-
除非有候选键,否则您不能拥有键。话虽如此,好的表设计规定每条记录都有一个键。在这种情况下,我怀疑整个记录是一个多列候选键 - 因此可以用作 PK。 (但您需要更详细地查看 - 或讨论 - 数据。)无论如何,键不会提高性能 - 索引可以。但是 PK 通常也是一个聚集索引。在这种情况下,可能会在 ProductTypeID 上添加一个 非键 索引以帮助查询,如果它尚未作为第一列包含在聚簇 PK 中。
-
@DeepakKumarPadhy 是一对多还是一对一的关系,我的意思是对于 productId 是否仅支持单个
BatteryID或特定 ID 可以支持多个电池? -
@SurajSingh:单个产品支持多个电池,所以产品id不能为主键
-
@DeepakKumarPadhy 您可以在三列上使用复合键,这将有助于删除重复值并可能提高搜索性能,请尝试使用 Sql Profiler 来比较性能。
标签: sql sql-server-2008 indexing primary-key