大侠,能否告诉索引内部碎片和外部碎片的区别。内部碎片好理解,可是外部碎片实在是无法理解。外部碎片也说是分页产生的,还是针对物理上的页和逻辑上的页不一致造成的。这个怎么理解呢。谢谢。

解决方案 »

  1.   

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

  2.   

    内部碎片是指本来page可以放100个key,但是事实才放了80个,比如fillfactor会引起内部碎片。
    外部碎片是当table存有聚集索引时,当插入row时发现原page放不下,会进行page split,把page内一半的row放到一个新的page上,造成外部碎片。
      

  3.   

    内部碎片,就好比2居室就住了一个人,空余一间屋子。
    外部碎片,就好比我有2间居室,但不在一个屋子里。要是获取我使用的屋子平米数(提取有用的数据),
    第一种,得到2居大小,再除去空余屋子的大小。
    第二种,需要我从第一个屋子量量,再到第二个屋子量量,再加和面积。所以,最好的状态就是尽量在一个屋子,而且不浪费面积。
    可问题是,屋子的大小得是1024*8(1个页)的整数倍,所以,多多少少会有浪费的。 只能尽量贴近最佳状态。 大概是这样,LZ可以参考msdn看看。
      

  4.   

    创建index的时候设置fillfactor(e.g. 80),这时候的index是有内部碎片的(因为一个page只有80%的空间储存了数据),但是没有外部碎片因为page顺序和逻辑顺序一致。
    另一个例子,每一个page都放满了数据,这时候是没有内部碎片。但是由于反复的insert造成很多的page split,于是有外部碎片。
      

  5.   

    回2楼的:page顺序和逻辑顺序一致这句话怎么理解啊?在聚集索引中插入的时候造成的page split怎么会造成page顺序和逻辑顺序不一致的情况呢。在插入的时候对于聚集索引的关键字不是会进行重排使他们一致吗。能否给个例子说明。谢谢啦