源:
http://blog.csdn.net/zhangsuiwen/article/details/5087154评:
有些人可能对主键和聚集索引有所混淆,其实这两个是不同的概念,下面是一个简单的描述。不想看绕口文字者,直接看两者的对比表。尤其是最后一项的比较。
主键(PRIMARY KEY )
来自MSDN的描述:
表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。
一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。
如果为表指定了 PRIMARY KEY 约束,则 SQL Server 2005 数据库引擎 将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。
创建主键时,数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。
聚集索引
聚集索引基于数据行的键值在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
每个表几乎都对列定义聚集索引来实现下列功能:
两者的比较
下面是一个简单的比较表
|
主键 |
聚集索引 |
用途 |
强制表的实体完整性 |
对数据行的排序,方便查询用 |
一个表多少个 |
一个表最多一个主键 |
一个表最多一个聚集索引
|
是否允许多个字段来定义 |
一个主键可以多个字段来定义 |
一个索引可以多个字段来定义 |
|
|
|
是否允许 null 数据行出现 |
如果要创建的数据列中数据存在null,无法建立主键。 创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。 |
没有限制建立聚集索引的列一定必须 not null . 也就是可以列的数据是 null 参看最后一项比较 |
是否要求数据必须唯一 |
要求数据必须唯一 |
数据即可以唯一,也可以不唯一。看你定义这个索引的 UNIQUE 设置。 (这一点需要看后面的一个比较,虽然你的数据列可能不唯一,但是系统会替你产生一个你看不到的唯一列) |
|
|
|
创建的逻辑 |
数据库在创建主键同时,会自动建立一个唯一索引。 如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引
|
如果未使用 UNIQUE 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。 必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。 |
簇集索引=聚集索引:
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行 的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此 类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节 省成本。
非簇集索引:
非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:
数据行不按非聚集索引键的顺序排序和存储。
非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。
非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 Microsoft® SQL Server™ 2000 中,非聚集索引中的行定位器有两种形式:
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 2000 将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL Server 通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。
唯一索引:
唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。
唯一索引既是索引也是约束。
复合索引:
索引项是多个的就叫组合索引,也叫复合索引。
复合索引使用时需要注意索引项的次序。
相关推荐
一、 创建主键(主键=主键索引=聚集索引) 主键是什么? 答:拿主键可以唯一确定一条数据,它和物理存储排序一致,不能为空,一个表只能有一个。 原本没有创建的主键的表在磁盘上存储为: Id=0;username=username0;sex...
表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。
上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一...
整理了一下郭红俊大哥的关于SQL索引...4.主键与聚集索引 5.理解newid()和newsequentialid() 6.索引的代价,使用场景 7.Indexing for AND 8.数据基本格式补充 9.Indexing for OR 10.Joins 时的三种算法简介档,方便查询.
视图索引存储过程 事务显示事务 隐式事务 --索引 作用:提高查询效率 降低新增修改和删除的效率 --主键索引 唯一索引 聚集索引非聚集索引 --创建索引 --索引index 默认创建的是不唯一,非聚集索引
o非聚集索引:非聚集索引就是以非主键创建的索引,在叶子节点存储的是主键和索引列。 逻辑维度 o主键索引:一种特殊的唯一索引,不允许有空值。 o普通索引:MySQL中基本索引类型,允许空值和重复值。 o联合索引:多...
Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。 本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈 在分析这两种...
很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的。 主键是一个约束(constraint),他依附在一个索引上,这个索引可以是聚集索引,也可以是非聚集索引。 所以在一个(或一...
自己制作的pdf,目录包括如下: <br>记录数据的基本格式 3 聚集索引,非聚集索引 8 测试中常看指标和清除缓存方法 15 主键与聚集索引 18 理解newid()和newsequentialid() 20 索引的代价,使用场景 ...
聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。 聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表...
1 .索引的存储结构是什么? 是B树、B+树还是二叉树 2.什么是聚集索引? 聚集索引的主键索引和次要索引区别是什么 3.什么是非聚集索引? 非聚集索引的主键索引和次要索引区别是什么
InnoDB中会自动为主键建立聚集索引,即使没有定义主键,也会自动生成一个隐藏主键建立索引;MyISAM中不会自动生成主键。建议给每张表指定主键。 2、频繁作为查询条件的字段 索引是以空间换时间的,某字段如果频繁...
聚集索引和⾮聚集索引的区别, 聚集索引的约束是唯⼀性,是否要求字段也是唯⼀的呢?, 为什么聚集索引可以创建在任何⼀列上,如果此表没有主键约束,即有可能存在重复⾏数据呢?, 在主键上创建聚集索引的表在数据...
B+树介绍,为什么选择B+树,非聚集索引 聚集索引 第一点、第二点、第三点 不建议使用过长的字段,不建议使用非自增字段作为主键 什么条件下使用索引? 索引选择性,行数前缀索引 所谓索引的选择性是指不重复的索引值...
主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。 在MySQL中,InnoDB数据表的主键...
0、导读 InnoDB表的索引有哪些特性,以及索引组织结构是怎样的 1、InnoDB聚集索引特点 ...如果有显式定义的主键(PRIMARY KEY),则会选择该主键作为聚集索引否则,选择第一个所有列都不允许为NULL的唯
MySQL索引原理查找算法:二叉查找树BitMap位图索引分类主键索引唯一索引普通索引全文索引索引原理解析B+树聚集索引和非聚集索引建立索引创建表时指定组合索引