日期:2014-05-17  浏览次数:20473 次

各位大仙,我想问一个关于聚集索引的问题
创建数据表studentinfo2:
create table studentinfo2
(id int,
studentid int,
name varchar(20),
major varchar(20),
subjectid int,
score decimal(5,2),
remark varchar(200))

向数据表中插入数据:
insert into studentinfo2
values(1,201201,'刘瑞','计算机',1,80,'无'),
(4,201210,'王明','会计',2,85,'无'),
(3,201215,'周婷婷','金融',3,77,'无'),
(2,201125 ,'吴琳琳','金融',3,80,'无'),
(5,201118,'张小雨','数学',4,79,'无')

插入数据后的数据表如下图所示:


将name列设置成聚集索引:
create unique clustered index IX
ON studentinfo2(name)

查询数据表:
select* from studentinfo2

可以看到:表中数据的排列顺序发生了改变,按照索引键进行了重新排序。
--------------------------------------------------------------------------
我想问的是:
当设置了聚集索引后,数据表中的数据按照索引建的顺序进行排序,排完序后的数据直接覆盖掉原先的数据?还是不覆盖掉原先的数据但是另存了一份按照索引键排序后的数据?

------解决方案--------------------
引用:
创建数据表studentinfo2:
create table studentinfo2
(id int,
studentid int,
name varchar(20),
major varchar(20),
subjectid int,
score decimal(5,2),
remark varchar(200))

向数据表中插入数据:
insert into studentinfo2
values(1,201201,'刘瑞','计算机',1,80,'无'),
(4,201210,'王明','会计',2,85,'无'),
(3,201215,'周婷婷','金融',3,77,'无'),
(2,201125 ,'吴琳琳','金融',3,80,'无'),
(5,201118,'张小雨','数学',4,79,'无')

插入数据后的数据表如下图所示:


将name列设置成聚集索引:
create unique clustered index IX
ON studentinfo2(name)

查询数据表:
select* from studentinfo2

可以看到:表中数据的排列顺序发生了改变,按照索引键进行了重新排序。
--------------------------------------------------------------------------
我想问的是:
当设置了聚集索引后,数据表中的数据按照索引建的顺序进行排序,排完序后的数据直接覆盖掉原先的数据?还是不覆盖掉原先的数据但是另存了一份按照索引键排序后的数据?
不覆盖,没有聚集索引之前,数据没有顺序,如果非要说顺序,那就是插入的顺序,但是进过增删改之后数据的顺序可能会改变,但是有了聚集索引后,每个页直接就有一个双向连接关联,但是实际上数据页的存储位置没有改变,只是在需要查询的时候,根据那个连接的前一页和后一页重新组织
------解决方案--------------------
总的来说,数据还是一份,只是有一个模子把数据按照规定组合起来而已。(这个是有聚集索引),如果没有,就是一盘沙子
------解决方案--------------------
这个不会覆盖的。

只是把原来的数据按照索引键排序后,重新存在硬盘上,所以当你select查询数据的时候,这个时候数据就自然的按照索引键来排序了。
------解决方案--------------------
需要特别注意的是,在sql server中有2类表,一种就是堆表,一种就是建立了聚集索引后的表。

你建立了聚集索引的表,于是你的表就是第二种表,所有的数据都会按照索引键排序后,重新存储在磁盘上,这个是物理顺序。
------解决方案--------------------
引用:
Quote: 引用: