为什么SQL server中的表只能有一个聚集索引?

Lucenedonet 2011-09-21 02:30:43
解释最多的是,每个表的排序只能按照一种方式,由于聚集索引是和表中的行相一致的。所以只能有一个聚集索引。

但是
表有很多字段,每个字段完全可以重新建立一个聚集索引呐!

...全文
1163 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇洒王子 2011-09-23
  • 打赏
  • 举报
回复
不要想的太复杂了
yzsind 2011-09-22
  • 打赏
  • 举报
回复
聚集索引只能有一个的原因是表数据只有一份,只能按一种排序规则组织。
如果表数据可以有多份,那就可以建多个聚集索引,也许将来数据库厂商会考虑这种需求,就是用空间换性能,但现在的数据库都没有实现一个表有多份数据的存储结构,因为实现的技术成本很高(每个insert,delete,update都要维护多份数据,还有锁之类的管理),占用空间也大,对实际应用的优化效果比较难平衡,大部份情况可能性能更差。
NBDBA 2011-09-22
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 lucenedonet 的回复:]
我觉得能找到两个索引排序方式和物理存储一致的。

但好像又不大可能。

看过聚集索引的B树,就知道,其实物理存储页已经在索引里面了!

这样一来,就不能有第二种索引了!

除非是非聚集索引
[/Quote]
理解了就结贴
nzperfect 2011-09-22
  • 打赏
  • 举报
回复
楼主你要能说服所有的数据库厂家按你的这种多聚集索引来存储数据的话,也是一个划时代的变革了
至少目前存储硬件如此慢的今天,还不可能这样做。
如果将来硬件不是问题,也难说不会改变现有的存储方式及查询算法,哈哈
哈哈王戈多 2011-09-22
  • 打赏
  • 举报
回复
我也来学习学习
gogodiy 2011-09-22
  • 打赏
  • 举报
回复
聚集索引决定了表中记录的物理排序。物理排序同一时间里只能有一种排序吧,你不可能同一时间又按照姓名物理排序,又按照编号物理排序。所以聚集索引同一时间只能有一个。
建议楼主仔细看下索引相关方面的基本知识。
Lucenedonet 2011-09-22
  • 打赏
  • 举报
回复
我觉得能找到两个索引排序方式和物理存储一致的。

但好像又不大可能。

看过聚集索引的B树,就知道,其实物理存储页已经在索引里面了!

这样一来,就不能有第二种索引了!

除非是非聚集索引
ningweidong 2011-09-22
  • 打赏
  • 举报
回复
索引方式是能有一个是聚集方式
就像字典的索引,要么按字母排序,要么按笔画排序,
虽然说有很多排序方式,但是只能用其中一个作为主要的
b2b160 2011-09-22
  • 打赏
  • 举报
回复
楼主将聚集索引理解为普通索引了,其实就是表的存储顺序,一个表存一次就好了,否则冗余太大了
showjim 2011-09-21
  • 打赏
  • 举报
回复
单纯的理论上,聚集索引的数量是由数据份数决定的,如果有多份数据,也是可以有多个聚集索引的。
一般情况下这个代价比普通索引代价大很多,所以数据库一般的都只支持一份数据。
zhongxin799 2011-09-21
  • 打赏
  • 举报
回复
物理顺序当然只有一个
petrie 2011-09-21
  • 打赏
  • 举报
回复
想想电话簿!
oO寒枫Oo 2011-09-21
  • 打赏
  • 举报
回复
5k万行的表 重新建立 索引
应该2小时内就可以了吧
Lucenedonet 2011-09-21
  • 打赏
  • 举报
回复
What makes a clustered index special is that the leaf level of a clustered index is the actual data—that is, the data is re-sorted to be stored in the same physical order that the index sort criteria state.

第二行中间 re-sorted 是亮点。

果然重新组织了数据,那要是给5k万行的表重新建立聚集索引,那5kw行的数据都要动啊。
yubofighting 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 geniuswjt 的回复:]
龟腚!!
[/Quote]
+
koumingjie 2011-09-21
  • 打赏
  • 举报
回复
聚集索引是表的物理排列顺序,同一个表的物理顺序是唯一的,所以聚集索引只能有一个
Lucenedonet 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lxpbs8851 的回复:]

是的 你得先把 “拼音”聚集索引 drop掉
[/Quote]

OK

DROP INDEX idx_pinyin ON dictionary;
oO寒枫Oo 2011-09-21
  • 打赏
  • 举报
回复
当然 聚集索引 可以允许多列的
(偏旁部首 desc , 拼音 asc)
oO寒枫Oo 2011-09-21
  • 打赏
  • 举报
回复
是的 你得先把 “拼音”聚集索引 drop掉
Lucenedonet 2011-09-21
  • 打赏
  • 举报
回复
如果说建立聚集索引之后,表的物理存储结构都已经改变,改变成符合成这个聚集索引的形式,那当然很难建立第二个聚集索引了!

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

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧