索引与主键的区别

日期: 2009-09-10 作者:Denny Cherry翻译:孙瑞 来源:TechTarget中国 英文

在日常的数据库管理中,许多人对于主键的概念、索引的概念以及它们各自的用法都比较模糊,它们有何区别呢?   主键是一个逻辑对象。我的意思是,它只是定义了一个列或一个列集的属性集合,它规定了组成主键的这些列是唯一并且没有空值的,因此这些值可以用来鉴别表中的单独一行。在大多数的数据库平台中,主键上都会有一个索引。   相反地,一个索引并不是用来定义唯一性的。

索引的作用是根据数据值,更加快速地查找表中的指定行,而数据值就是索引的一部分。当你在数据库中创建了一个索引,就相当于创建了一个物理对象,它是存储在硬盘中的。拿员工表作为例子看一下:   CREATE TABLE dbo.Emp……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在日常的数据库管理中,许多人对于主键的概念、索引的概念以及它们各自的用法都比较模糊,它们有何区别呢?

  主键是一个逻辑对象。我的意思是,它只是定义了一个列或一个列集的属性集合,它规定了组成主键的这些列是唯一并且没有空值的,因此这些值可以用来鉴别表中的单独一行。在大多数的数据库平台中,主键上都会有一个索引。

  相反地,一个索引并不是用来定义唯一性的。索引的作用是根据数据值,更加快速地查找表中的指定行,而数据值就是索引的一部分。当你在数据库中创建了一个索引,就相当于创建了一个物理对象,它是存储在硬盘中的。拿员工表作为例子看一下:

  CREATE TABLE dbo.Employee
  (EmployeeId INT PRIMARY KEY,
  LastName VARCHAR(50),
  FirstName VARCHAR(50),
  DepartmentId INT,
  StartDate DATETIME,
  TermDate DATETIME,
  TermReason INT)

  我们的这个表中的主键是员工ID,因为我们可以用ID来鉴别员工。如果我们使用姓氏来搜索表,那么数据库将需要读取整个表到内存中,这样我们才会得到相应的员工。如果在进行相同的查询时根据姓氏列创建一个索引,那么数据库只需要读取索引到内存就可以了。这样速度无疑加快了,因为数值早已经存储在索引中,数据库引擎可以直接在索引中找到正确的位置并迅速地找到匹配记录。

  希望以上的内容可以对DBA理解索引与主键有帮助。

翻译

孙瑞
孙瑞

相关推荐