索引内部碎片外部碎片说明

clicsullivan 2012-06-25 03:48:24
大侠,能否告诉索引内部碎片和外部碎片的区别。内部碎片好理解,可是外部碎片实在是无法理解。外部碎片也说是分页产生的,还是针对物理上的页和逻辑上的页不一致造成的。这个怎么理解呢。谢谢。
...全文
322 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2012-06-26
  • 打赏
  • 举报
回复
3楼解释清晰明了,学习了。
clicsullivan 2012-06-26
  • 打赏
  • 举报
回复
回2楼的:page顺序和逻辑顺序一致这句话怎么理解啊?在聚集索引中插入的时候造成的page split怎么会造成page顺序和逻辑顺序不一致的情况呢。在插入的时候对于聚集索引的关键字不是会进行重排使他们一致吗。能否给个例子说明。谢谢啦
mayuanf 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

2楼对于外部碎片的解释我还是没有办法理解,那分页了针对原来的页不是还是内部碎片了吗?怎么就变成外部碎片了呢。和内部碎片不是一样吗。都是一个页无法全部存放数据。
[/Quote]
创建index的时候设置fillfactor(e.g. 80),这时候的index是有内部碎片的(因为一个page只有80%的空间储存了数据),但是没有外部碎片因为page顺序和逻辑顺序一致。
另一个例子,每一个page都放满了数据,这时候是没有内部碎片。但是由于反复的insert造成很多的page split,于是有外部碎片。
clicsullivan 2012-06-25
  • 打赏
  • 举报
回复
2楼对于外部碎片的解释我还是没有办法理解,那分页了针对原来的页不是还是内部碎片了吗?怎么就变成外部碎片了呢。和内部碎片不是一样吗。都是一个页无法全部存放数据。
Mr_Nice 2012-06-25
  • 打赏
  • 举报
回复
内部碎片,就好比2居室就住了一个人,空余一间屋子。
外部碎片,就好比我有2间居室,但不在一个屋子里。

要是获取我使用的屋子平米数(提取有用的数据),
第一种,得到2居大小,再除去空余屋子的大小。
第二种,需要我从第一个屋子量量,再到第二个屋子量量,再加和面积。

所以,最好的状态就是尽量在一个屋子,而且不浪费面积。
可问题是,屋子的大小得是1024*8(1个页)的整数倍,所以,多多少少会有浪费的。 只能尽量贴近最佳状态。

大概是这样,LZ可以参考msdn看看。
mayuanf 2012-06-25
  • 打赏
  • 举报
回复
内部碎片是指本来page可以放100个key,但是事实才放了80个,比如fillfactor会引起内部碎片。
外部碎片是当table存有聚集索引时,当插入row时发现原page放不下,会进行page split,把page内一半的row放到一个新的page上,造成外部碎片。
黄_瓜 2012-06-25
  • 打赏
  • 举报
回复
参考

http://www.cnblogs.com/BlogNetSpace/archive/2008/12/03/1346743.html

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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