免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3835 | 回复: 7
打印 上一主题 下一主题

为什么聚族索引的空间利用率这么差? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-11 23:49 |只看该作者 |倒序浏览
做了测试:

insert一个非聚族索引表和聚族索引表(组合索引),相同的表结构,只是索引类型不同。
需要注明一点的是:insert的时候,数据不是严格按照组合索引的顺序入库的。

发现聚族索引的表,空间页面有空洞,利用率比较低,是非聚族的2倍-2.5倍。这个浪费还是很严重的,必现的。即使聚族索引做物理位置排序,也不应该有如此的浪费啊?

请问有没有大佬有解决办法或者给出合理的解释?谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-03-12 01:56 |只看该作者

回复 1楼 syxie 的帖子

出现这种情况是和你的数据插入的顺序有关的,举一个简单的例子
create table t(c1 int) with max_row_per_page=2(语法可能有点问题,自己查一下手册具体的写法)
create cluster index on t (c1)
insert t values(10)
insert t values(9)
....
insert t values(1)

这样的数据插入的结果就会造成空间的浪费。
原理是这样的,当要插入的数据按照聚族索引的排列要求,正要插入在某一个数据的第一条数据之前,那么这个时候,就会新分配一个数据页,将所需插入的数据写新的数据页内,并将旧的数据页的页链断开,并将新页加入加入数据页链表中。
下面画一个简单的图示,希望对你理解问题产生的原因有些帮助。其中4,5为具体的数据,233,234为数据页的数据页号(注:很是奇怪不知道什么原因,编辑的状态下这个方框还算整齐,但是发表之后就比较乱,只是个大致的例子表示一个数据页,大家对付看吧。)
    _____  
  ->|  5     |->
  <-|         |<-
      |(233)|
      |____|
插入数据4后
   _____        _____  
->|  4     |->->|  5     |->   
->|         |<-<-|         |<-   
    |(234)|       |(233) |     
    |____|       |_____|     
              
如果你想释放浪费的空间一个办法是使用非聚簇索引。第二方法定期将表中的数据bcp out出来,然后重新bcp in回去,由于bcp out的时候所有的数据按照聚簇索引的排序顺序bcp out出来,然后bcp in的时候,就不会产生空间浪费的问题了。第三个方法,重建该非聚簇索引。

[ 本帖最后由 hawker 于 2007-3-12 01:59 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-03-12 23:42 |只看该作者
多谢!

我再多问一下:

如果一个聚族索引,其中的数据,如果按照索引倒序的方式入表的话,如果有10条数据的话,那岂不需要10个页面? 但是实际上不是这样的,好像sybase也有什么处理吧?

论坛徽章:
4
2015年亚洲杯之阿联酋
日期:2015-03-10 10:32:022015年亚洲杯之阿曼
日期:2015-03-10 14:53:222015亚冠之水原三星
日期:2015-07-18 15:40:262015亚冠之塔什干棉农
日期:2015-07-27 20:52:05
4 [报告]
发表于 2007-03-12 23:45 |只看该作者
why clustered index?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
5 [报告]
发表于 2007-03-13 13:05 |只看该作者
你的表是APL还是DOL?

论坛徽章:
0
6 [报告]
发表于 2007-03-14 08:21 |只看该作者
APL表

论坛徽章:
0
7 [报告]
发表于 2007-03-14 21:08 |只看该作者
聚族索引应该是比非聚族索引大吧,因为聚族索引的计算是索引+数据的大小,我记得书上好象是这么说的.

论坛徽章:
0
8 [报告]
发表于 2007-03-15 21:56 |只看该作者

回复 3楼 syxie 的帖子

图示所指情况是对于一般的数据页(不包括第一个数据页)的情况,如果是第一个数据页上的数据插入,那么就会将数据往下移。
例如:如果一个页可以存4条数据,那么如果你倒序插入10条数据,大概需要7个数据页才可以存下10条数据。如果你正序插入10条数据,那么只需要3个数据页就可以存下10条数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP