2010-02-02 198 views
3

除了在表中标识唯一列之外,什么是主键?难道这不是通过简单地在列上使用自动增量约束来完成的?我知道PK和FK被用来关联不同的表,但是不能通过使用连接来完成?为什么使用主键?

基本上数据库在使用主键连接时如何提高性能?

回答

4

主要是为了与外键参照完整性,,当你有一个PK也将查找值

+0

如果你没有在where子句中使用PK,那么你仍然需要表扫描。 – ScaryAardvark 2010-02-02 19:05:36

+0

是的..你是对的...所以我:-) .....如果你有一个PK(默认情况下创建一个聚集索引),你永远不会得到一个表扫描(因为聚集索引拥有所有表本身的数据)......但是,如果你的WHERE子句没有被覆盖,你将会得到索引扫描 – SQLMenace 2010-02-02 19:13:51

1

一些的PK 时在后台创建一个索引,这样就不需要表扫描只是一个自动递增的列。此外,你通常加入使用PK和FK。必须有一些关系才能进行连接。此外,大多数DBMS默认会自动索引PK,这可以提高连接性能以及根据ID查询特定记录。

2

RDBMS提供程序通常经过优化,可以与具有主键的表一起使用。大多数商店统计信息有助于优化查询计划这些统计信息对性能非常重要,特别是在较大的表上,并且如果没有主键,它们的工作方式不会相同,并且最终会导致无法预测的查询响应时间。

大多数数据库最佳实践书籍都建议使用主键创建所有表,但没有例外,遵循此惯例将是明智之举。没有太多事情说初级软件开发人员不止是建立一个没有参照完整性的数据库!

1

您可以在查询中没有主键的情况下加入,但是,您必须定义一个主键来强制实施数据完整性约束,至少在SQL Server中。 (外键等)

此外,这里是一个有趣的读取你Primary Keys

1

在Microsoft Access中,如果您有SQL Server的链接表,则源表必须具有主键才能使链接表可写。至少,Access 2000和SQL Server 6.5就是这种情况。它可能与更高版本不同。

0

关键是关于数据完整性以及识别。通过在数据库中设置一个约束来保证密钥的唯一性,以避免违反密钥的“坏”数据。以这种方式保证数据完整性规则的事实正是使密钥可用作标识符的原因。这适用于任何关键。按照惯例,每个表的一个键称为“主键”,但不会使其他键不太重要。

实际上,我们需要能够对所有类型的数据(不仅仅是数字)执行唯一性规则,以满足数据质量和可用性的要求。