聚集索引和非聚集索引的区别有哪些
3个回答
展开全部
1、含义上的区别
聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。
非聚集索引是一种索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。
2、从行定位器的性质上来区别
非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。如果表有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。
如果表是堆集,即非聚集索引,行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。
3、应用上的区别
聚集索引适合应用于含有大量非重复值的列;使用BETWEEN,>,>=,<或<=返回一个范围值的列;被连续访问的列;返回大型结果集的查询;经常被使用连接或GROUP BY子句的查询访问的列。
非聚集索引适用于经常被分组排序的列;大数目的不同值;频繁更新的列;外键列;主键列;频繁修改索引列。
参考资料来源:百度百科-聚集索引
参考资料来源:百度百科-非聚集索引
推荐于2017-12-16 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
a.此列包含有限数目的不同值;
b.查询的结果返回一个区间的值;
c.查询的结果返回某值相同的大量结果集。
非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致
,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的
数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非
聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用非聚集索
引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。
--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列
称为表的主键.(默认为聚集索引)聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方
,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中
的信息按另一种顺序存储(这可以由聚集索引规定)。
如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
聚集索引..就像我们新华字典中的按拼音排序..即你查.."爱"字..可以在前面看到"
癌"字...但不你不在前后页中看到"受"字..
而非聚集索引..就是新华字典中的按部首..笔划排序...
聚集索引相当于我们书本上前面的目录的一样,它可以方便快速的找到你想找的内容
,而非聚集索引就相当于书最后几页的解释,它是对书中某个语句或者是生词的解释
,就像我们上学时候的地理说一样,书后面都有各种地理名称的英文解释;
《数据库原理》里面的解释:聚集索引的顺序就是数据的物理存储顺序,而非聚集索
引的顺序和数据物理排列无关。因为数据在物理存放时只能有一种排列方式,所以一
个表只能有一个聚集索引。
在SQL SERVER中,索引是通过二叉树的数据结构来描述的;我们可以如此理解这个两
种索引:聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,
只不过其包含一个指向对应数据块的指针。
聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面
衡量。
a.此列包含有限数目的不同值;
b.查询的结果返回一个区间的值;
c.查询的结果返回某值相同的大量结果集。
非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致
,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的
数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非
聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用非聚集索
引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。
--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列
称为表的主键.(默认为聚集索引)聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方
,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中
的信息按另一种顺序存储(这可以由聚集索引规定)。
如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
聚集索引..就像我们新华字典中的按拼音排序..即你查.."爱"字..可以在前面看到"
癌"字...但不你不在前后页中看到"受"字..
而非聚集索引..就是新华字典中的按部首..笔划排序...
聚集索引相当于我们书本上前面的目录的一样,它可以方便快速的找到你想找的内容
,而非聚集索引就相当于书最后几页的解释,它是对书中某个语句或者是生词的解释
,就像我们上学时候的地理说一样,书后面都有各种地理名称的英文解释;
《数据库原理》里面的解释:聚集索引的顺序就是数据的物理存储顺序,而非聚集索
引的顺序和数据物理排列无关。因为数据在物理存放时只能有一种排列方式,所以一
个表只能有一个聚集索引。
在SQL SERVER中,索引是通过二叉树的数据结构来描述的;我们可以如此理解这个两
种索引:聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,
只不过其包含一个指向对应数据块的指针。
聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面
衡量。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
聚集索引和非聚集索引的区别如下:
1.聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦
具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
2.聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索
引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,
降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的
具体的创建聚集索引的方式如下:
--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
1.聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦
具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
2.聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索
引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,
降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的
具体的创建聚集索引的方式如下:
--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询