51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> sqlserver >> 文章正文

SQL server中的表只能有一个聚集索引

更新时间:2012-1-4:  来源:51代码网

解释最多的是,每个表的排序只能按照一种方式,由于聚集索引是和表中的行相一致的。所以只能有一个聚集索引。

但是 
表有很多字段,每个字段完全可以重新建立一个聚集索引呐!
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。

比如关于人的基本信息有:
姓名 年龄 出生地点 学历 身高 体重 原籍 

我们可以按照姓名排序建个索引,也可以按照年龄排序建个索引,当然每个字段都可以排序建个索引。
并且能够保证这些索引的排序方式,和这个表中这个字段的排序方式相一致。

这不就是建立很多聚集索引了吗?

一次只能排一下序啊 

你可以理解为添加了聚集索引 就已经按照那行排序了 

如果都是聚集索引 你怎么知道按照哪行排序?

表犹如字典 一个字典只有一个物理顺序

索引 中键值的顺序不一定是 表中数据的物理顺序 
但是 聚集索引中 键值的顺序一定是 表中数据的物理顺序

聚集索引的索引顺序与表中记录的物理顺序一致,因为表中的物理顺序只能有一种,因此不能有两种索引

如果说建立聚集索引之后,表的物理存储结构都已经改变,改变成符合成这个聚集索引的形式,那当然很难建立第二个聚集索引了!

就像上面童鞋所说,偏旁部首也可以建立聚集索引,但是当你把字典的顺序重新按照偏旁部首排序的话,那么拼音肯定不是聚集索引了

聚集索引只能有一个的原因是表数据只有一份,只能按一种排序规则组织。
如果表数据可以有多份,那就可以建多个聚集索引,也许将来数据库厂商会考虑这种需求,就是用空间换性能,但现在的数据库都没有实现一个表有多份数据的存储结构,因为实现的技术成本很高(每个insert,delete,update都要维护多份数据,还有锁之类的管理),占用空间也大,对实际应用的优化效果比较难平衡,大部份情况可能性能更差。

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |