SQL Server 创建仅具有复合主键的SQL表

ibps3vxo  于 2023-01-16  发布在  其他
关注(0)|答案(2)|浏览(119)

我试图创建一个SQL表来存储客户ID和邮政编码,只有这2列。这2个值的组合使一行唯一。我有3个选择,但不知道哪一个将是有效的。我将存储在这个表中约200000行,读操作是高,写将发生在一天一次。
选择查询将根据输入的邮政编码获取所有客户。
示例:Select customerid from dbo.customerzipcode where zipcode in (<multiple zipcodes>)
备选办法1:

  • 创建一个包含2列(客户ID和邮政编码)的表
  • 为这两列创建组合主键。

备选方案二:

  • 创建一个包含3列(ID、CustomerID和邮政编码)的表
  • id是身份和主键
  • 为customerid和zipcode创建唯一约束

备选方案3:

  • 创建一个包含3列(ID、CustomerID和邮政编码)的表
  • 仅为邮政编码创建非聚集索引。

你能告诉我哪个选择更好吗?

dl5txlt9

dl5txlt91#

适合您的用例的最佳选项将取决于您的应用程序的特定要求和约束。
选项1:如果customerid和zipcode列的组合唯一标识表中的每一行,则在这两个值上创建组合主键是一个好方法。这将确保不会向表中插入重复的行,并且还允许使用主键进行快速查找。
选项2:如果要为每一行维护一个单独的主键,并确保这两个值的组合是唯一的,则创建一个单独的标识列(自动递增主键)并在customerid和zipcode列上创建一个唯一约束条件是一个不错的方法。如果要将主键用作其他表中的外键,则此选项很好。
选项3:如果要优化在邮政编码列上进行筛选的查询的性能,则仅在邮政编码列上创建非聚集索引是一种很好的方法。如果要基于邮政编码获取客户,则此选项很好。
在您的情况下,由于您有大量的读取操作,并且您将根据客户的邮政编码查询客户,因此选项3将是最佳选项,因为它将优化查询的性能。但是,考虑读取和写入性能之间的权衡,并相应地调整您的设计始终是好的。
还值得注意的是,建议使用示例数据测试您的查询和表的性能,以确保您选择的设计将满足您的性能需求。

rjee0c15

rjee0c152#

从dbo.customerzipcode中选择客户ID,其中邮政编码位于()中
规范设计将具有一个索引,其中每一列都作为前导列,以支持按邮政编码或客户ID进行高效查找,例如

create table customerzipcode
(
  zipcode varchar(10) not null,
  customerid int not null references customer,
  constraint pk_customerzipcode primary key (zipcode,customerid),
  index ix_customerzip_customerid (customerid)
)

相关问题