如果我没有在表中定义主键,是否有区别

时间:2015-04-30 22:06:53

标签: sql-server primary-key

我已经使用SQL Server很长一段时间了,我总是用设计视图创建数据库。

我创建表格的步骤是:

  • 右键单击表 - >新表
  • 我的第一列总是SOMETHING_ID(int) - >我将SOMETHING_ID设为Identity,自动增量为1
  • - >然后我添加其他列
  • - >保存并使用

如您所见,我没有通过右键单击并设置为主要来定义SOMETHING_ID

在这种情况下是否会对性能产生影响?

3 个答案:

答案 0 :(得分:2)

是的,它可能会影响性能,因为创建主键实际上是为它创建索引。因此,当您在该键上连接表时,如果存在索引,它将极大地提高性能....特别是如果您有大量数据。

答案 1 :(得分:2)

您真正需要做的是创建聚簇索引。默认情况下,主索引是聚簇索引(但您可以创建不是聚簇索引的主索引)。没有聚簇索引的表称为堆,除了非常特殊的情况,您应该在每个表上都有一个聚簇索引。主索引是仅具有唯一值且没有任何(甚至不是一个)空索引值的索引。

使用聚簇索引的查询通常是非常有效的查询,但如果没有聚簇索引(即使表有索引),它最终会在整个地方转发指针并搜索所有行给定的客户可以要求SQL Server读取许多页面。

要在表上创建聚簇索引,可以使用

等语法
create clustered index ix1_table1 on  table1(id)

任何类型的索引中使用的列都可以出现在表中的任何位置,并且不一定必须是标识列。

答案 2 :(得分:1)

通过不创建主键,您可以在规范化中破坏第一范式的规则。

没有主键的缺点

  1. 重复的机会
  2. 您的桌子不会与聚集索引
  3. 聚集在一起
  4. 您无法与其他表格建立主键 - 外键关系。
相关问题