ITPUB??ì3
ITPUB论坛 » Sybase管理与开发 » 神奇的APL表

标题: [精华] 神奇的APL表
离线 beginner_bj
资深会员


精华贴数 2
个人空间 0
技术积分 2110 (732)
社区积分 11 (9816)
注册日期 2002-4-2
论坛徽章:2
会员2007贡献徽章授权会员    
      

发表于 2007-7-27 00:07 
1、不管是什么数据库的什么表,只要表上有聚簇索引,那对表做reorg的时候一定要会让记录按聚簇索引重新排序(前提当然是这种表支持reorg),不按聚簇索引排序的reorg还不如不做。至于这是不是目的,那要看从哪个角度来说了。
2、我说DOL表在“范围查询”上有优势是说:如果查询结果较多时(比如一个页能放100条记录,而查询结果是500条),刚做过reorg的DOL表肯定效率最高,分析过程就是从I/O角度来着手的。
3、假如APL表上有聚簇索引,又假如一个页能放100条记录,且正好放满了100条记录,那么新insert一条记录,比如正好位于60、61之间,不仅会导致页的分裂,而且这个页的后40条记录都会挪一遍。我说APL表的这种行为可以看作是reorg。假如这个页后来又插入了一条记录(每次insert都当作一个事物),那么又会引起许多记录的挪动。这样挪动了M次,前M-1次都可以认为是白做。(delete/update的时候会怎样,我没想过,暂且不提)
4、多说一条:我认为,APL表不是不需要reorg,而是它不支持reorg,想做,但没办法做。

个人看法,望指正。


__________________
BLOG : http://www.cublog.cn/u/739/http://www.loveunix.net/discuz/forumdisplay.php?fid=70&page=1
只看该作者    顶部
离线 jarjar
新人,请多关照



精华贴数 1
个人空间 0
技术积分 4321 (309)
社区积分 166 (2540)
注册日期 2005-6-1
论坛徽章:20
现任管理团队成员2008北京奥运纪念徽章:现代五项生肖徽章:蛇生肖徽章:牛  
      

发表于 2007-7-27 10:08 
1、APL表的聚簇索引保证 数据的排列是按照索引的顺序来排列。APL索引树的页节点就是数据。因此在范围查询结果时,当通过索引定位到第一条纪录时,后续的结果集可以直接通过页链查找,不再需要从索引定位到页,再定位到纪录。
2、DOL表上的聚簇索引不保证 数据的排列是按照索引的顺序来排列(不管是不是做了reorg)。因此在范围查询的方式下,每条符合条件的纪录都只能通过索引来进行定位,而不能像APL表一样,直接通过页链来向下搜索,这两种方式的I/O是不同的。
3、举个例子来说明上述情况:一张表,每一个数据页上保存100条纪录,每个索引页上保存1000条纪录,索引树深度为3,现在一条SQL语句查询的结果纪录条数为1000条。在APL表的查询IO次数为:1(index root page)+1(index Intermediate page)+1000/100(由于数据是按索引顺序排序,因此直接按照页链向下读10页就可以得到符合条件的1000条纪录)=12。而DOL表的查询IO次数为:1(index root page)+1(index Intermediate page)+1(index leaf page)+1000(由于DOL不保证所有的数据是按照索引的顺序排列,因此只能从索引定位到页,所以有1000页IO)=1003。

所以,APL表的聚簇索引在范围查询(纪录集为多条的时候),比DOL表的聚簇索引有优势。

但是由于APL表要维持数据按照聚簇索引的顺序来排列,因此当聚簇索引的列选择不合适的时候,会导致insert/delet/update的效率降低(因为会导致页的分裂或者合并)。


__________________
if you want something done right, hire a professional
只看该作者    顶部
离线 jarjar
新人,请多关照



精华贴数 1
个人空间 0
技术积分 4321 (309)
社区积分 166 (2540)
注册日期 2005-6-1
论坛徽章:20
现任管理团队成员2008北京奥运纪念徽章:现代五项生肖徽章:蛇生肖徽章:牛  
      

发表于 2007-7-27 10:16 
DOL表上的聚簇索引并不保证数据会按照索引的顺序排列(而APL表的聚簇索引是严格保证数据按照聚簇索引的顺序排列),而reorg的目的是因为DOL表的页结构导致。DOL表为了保证大并发下的insert/update/delete,因此它的页结构和APL表的页结构不同,而这种结构导致数据在频繁的insert/update/delete后,空间的浪费会比较严重,而reorg是为了整理回收空间而使用的,并不是为了使数据保持聚簇索引的顺序(DOL的聚簇索引并不要求数据按索引顺序排列)。


__________________
if you want something done right, hire a professional
只看该作者    顶部
离线 jarjar
新人,请多关照



精华贴数 1
个人空间 0
技术积分 4321 (309)
社区积分 166 (2540)
注册日期 2005-6-1
论坛徽章:20
现任管理团队成员2008北京奥运纪念徽章:现代五项生肖徽章:蛇生肖徽章:牛  
      

发表于 2007-7-27 10:17 
Clustered indexes on data-only-locked tables are structured like nonclustered
indexes. They have a leaf level above the data pages. The leaf level contains
the key values and row ID for each row in the table.
Unlike clustered indexes on allpages-locked tables, the data rows in a dataonly-
locked table are not necessarily maintained in exact order by the key  .
Instead, the index directs the placement of rows to pages that have adjacent or
nearby keys.

请仔细阅读我给你推荐的书上的内容。


__________________
if you want something done right, hire a professional
只看该作者    顶部
离线 1017of
新手上路


精华贴数 0
个人空间 0
技术积分 46 (28657)
社区积分 81 (3730)
注册日期 2002-11-23
论坛徽章:0
      
      

发表于 2007-7-27 10:26 
观望


只看该作者    顶部
离线 jarjar
新人,请多关照



精华贴数 1
个人空间 0
技术积分 4321 (309)
社区积分 166 (2540)
注册日期 2005-6-1
论坛徽章:20
现任管理团队成员2008北京奥运纪念徽章:现代五项生肖徽章:蛇生肖徽章:牛  
      

发表于 2007-7-27 10:44 


QUOTE:
最初由 1017of 发布
观望

把灌水的拖出去。磨树。


__________________
if you want something done right, hire a professional
只看该作者    顶部
离线 beginner_bj
资深会员


精华贴数 2
个人空间 0
技术积分 2110 (732)
社区积分 11 (9816)
注册日期 2002-4-2
论坛徽章:2
会员2007贡献徽章授权会员    
      

发表于 2007-7-27 20:46 
我中午敲的字呢?怎么都不见了?

难道我当时没发吗?


__________________
BLOG : http://www.cublog.cn/u/739/http://www.loveunix.net/discuz/forumdisplay.php?fid=70&page=1
只看该作者    顶部
离线 jarjar
新人,请多关照



精华贴数 1
个人空间 0
技术积分 4321 (309)
社区积分 166 (2540)
注册日期 2005-6-1
论坛徽章:20
现任管理团队成员2008北京奥运纪念徽章:现代五项生肖徽章:蛇生肖徽章:牛  
      

发表于 2007-7-30 10:04 


QUOTE:
最初由 beginner_bj 发布
我中午敲的字呢?怎么都不见了?

难道我当时没发吗?


那就再发一遍了。


__________________
if you want something done right, hire a professional
只看该作者    顶部
离线 beginner_bj
资深会员


精华贴数 2
个人空间 0
技术积分 2110 (732)
社区积分 11 (9816)
注册日期 2002-4-2
论坛徽章:2
会员2007贡献徽章授权会员    
      

发表于 2007-7-31 01:49 
1、APL表的聚簇索引保证 数据的排列是按照索引的顺序来排列_
——APL表的聚簇索引只保证同一页上数据的排列是按照索引的顺序来排列,数据若分布在多个页上,是肯定不保证按顺序排列的。
2、DOL表上的聚簇索引不保证 数据的排列是按照索引的顺序来排列(不管是不是做了reorg)
——你可以看看reorg rebuild
3、DOL表的查询IO次数为:1(index root page)+1(index Intermediate page)+1(index leaf page)+1000
——最后这个+1000,我不能肯定,不知道有没有方法可以监控到实际的IO次数?如果有办法,那就拿刚reorg过的DOL表测一下。

4、13楼
——还是reorg rebuild

5、dataonly-locked table are not necessarily maintained in exact order by the key.
——不必要(not necessarily)不表示不能


另外,
只说APL表,SELECT语句用到聚簇索引和只用到非聚簇索引,其它条件类似,会不会差别真的很大?
还是APL表,举个极端的例子,如果页为2K,行长大于1024,即一个数据页只能放一行,IO次数的计算又会怎样?
上面只说了SELECT的情况,对于INSERT/DELETE等情况,APL表显然很有劣势。重申一下我的观点——SELECT时APL表优势不明显,INSERT/DELETE时APL表劣势很突出。(当然,SELECT时APL表优势明不明显,还需要用测试数据说话)


__________________
BLOG : http://www.cublog.cn/u/739/http://www.loveunix.net/discuz/forumdisplay.php?fid=70&page=1
只看该作者    顶部
离线 beginner_bj
资深会员


精华贴数 2
个人空间 0
技术积分 2110 (732)
社区积分 11 (9816)
注册日期 2002-4-2
论坛徽章:2
会员2007贡献徽章授权会员    
      

发表于 2007-7-31 01:50 
白天太忙了,下次回帖要到明天晚上了。

怎么没有其他人参与讨论?


__________________
BLOG : http://www.cublog.cn/u/739/http://www.loveunix.net/discuz/forumdisplay.php?fid=70&page=1
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问