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

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


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

发表于 2007-7-24 12:38 
神奇的APL表

有人这么说:假如有个APL表,其clustered index是建立在日期字段的,目前共有01、02、03……10十个日期,每个日期对应1000条记录,现在insert 8000条记录,全是03号的。结果表里的记录还是严格按照01、02、03……10排序的。

我觉得APL表太神奇了,到底是不是这样呢?


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



精华贴数 0
个人空间 0
技术积分 10 (83164)
社区积分 0 (161277)
注册日期 2004-9-21
论坛徽章:0
      
      

发表于 2007-7-24 13:15 
其实没你想的那么神奇,呵呵
聚簇索引就是做这个的,随便着一本数据库原理的书看看罢。


只看该作者    顶部
离线 beginner_bj
资深会员


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

发表于 2007-7-24 21:05 


QUOTE:
最初由 aliking 发布
其实没你想的那么神奇,呵呵
聚簇索引就是做这个的,随便着一本数据库原理的书看看罢。


还是你先随便找一本数据库原理的书看看吧!

另外,你“找”和“吧”都写错了,呵呵呵呵呵呵


__________________
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-25 10:13 
这是APL表聚簇索引的特点,就是这样的。


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


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

发表于 2007-7-25 17:46 


QUOTE:
最初由 jarjar 发布
这是APL表聚簇索引的特点,就是这样的。

APL表聚簇索引为什么这么与众不同呢?实在想不通。
能否简单讲讲?或者给个文章的URL?谢谢。


__________________
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-26 09:02 


QUOTE:
最初由 beginner_bj 发布


APL表聚簇索引为什么这么与众不同呢?实在想不通。
能否简单讲讲?或者给个文章的URL?谢谢。


至于为什么会这样,不清楚。
我的理解是:APL表上的聚簇索引定义的特点就是这样的,所以技术上的实现也就是按这种方式来实现。

具体的文章你可以看看sybase官方的调优手册中关于index的章节。

其中其实也在讲他是这样,而没有讲他为什么要这样。


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


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

发表于 2007-7-26 13:09 


QUOTE:
最初由 jarjar 发布


至于为什么会这样,不清楚。
我的理解是:APL表上的聚簇索引定义的特点就是这样的,所以技术上的实现也就是按这种方式来实现。

具体的文章你可以看看sybase官方的调优手册中关于index的章节。

其中其实也在讲他是这样,而没有讲他为什么要这样。


刚刚看了下您提到的书,发现APL表的聚簇索引并不能保证所有记录物理上连续排序,它的排序也是逻辑上的。APL表能做到的只是保证同一个页上的记录物理上连续排序,页和页之间也是是靠指针跳来跳去。保证同一个页上的记录要物理上连续排序,显然不明智,当插入记录时会引起很多记录挪来挪去,势必要引起大量的磁盘IO。我前面说的例子中,假如原先的1000行是从3号0:00到24:00均匀分布的,后插入的8000行也是从3号0:00到24:00均匀分布的,那对数据库来说简直就是一场灾难。看来APL表只适用于那些长期不变动的表,那这样的表用DOL也不会有什么性能差异。

总而言之,丝毫看不出APL表有任何优势。相关的讨论在这里:
http://bbs.chinaunix.net/viewthr ... &extra=page%3D2


__________________
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-26 13:31 
APL表上的聚簇索引在范围查询下的优势很明显(原因我相信你能从聚簇索引的特点想出来)。

每一页上的数据是物理排序的,在insert/delete/update到APL表的索引字段的时候,是有可能造成页的分裂,造成额外的IO,这个问题的确存在。所以对于APL表上的聚簇索引字段的选择是要有所考虑的。


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


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

发表于 2007-7-26 16:53 
从原理上看,APL表上的聚簇索引在“特定”情况下的范围查询的优势显然是有,但和DOL表的聚簇索引在性能上会有明显的差别吗?我看没有。DOL表做一次reorg就和APL表的排序差不多了,即使很久没有做reorg,那差别最多就类似APL表上的使用聚簇索引和使用非聚簇索引的性能差别。差别显然不可能很大。另外,DOL表做一次reorg就可以保证几乎所有的记录物理上严格排序,APL表不支持reorg吧(这个我不确定)?它逻辑上相临的页,物理上是不能保证相临的(你提到的页的分裂的缘故),那么对于超过一个页的范围查询,DOL表能有优势吗?看下面三种情况:
1、有很多页分裂的APL表和刚做过reorg的DOL表比较起来,在用到聚簇索引的范围查询时,显然DOL表好。
2、有很多页分裂的APL表和长时间没做过reorg的DOL表比较起来,由于APL表的页物理上不连续,在用到聚簇索引的范围查询时,谁好不一定吧?但DOL表可以reorg啊,APL表的聚簇索引只好删掉重建了。APL表的聚簇索引不需要维护这种说法,看来是站不住脚了。
3、如果拿没有页分裂的APL表和长时间没做过reorg的DOL表比较起来,那APL表才有优势。但这样的APL表存在吗?哪个数据库里有长期不变动的大表?拿小表来比较显然没有什么意思。

我看APL表的特点可以这样理解:每insert一条或几条记录,它就自动reorg一次,只不过reorg的范围不是表,而是一个或多个页,产生页分裂后,数据根本不是物理上排序的。insert N条记录,APL表就reorg M次(M<N,但M>>1),其中M-1次是无用功,只会引起大量无用的磁盘IO,而且永远也不是物理上排序的,和长时间没做过reorg的DOL表差不多。


__________________
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-26 22:29 
你的推论过程的基础是错的,导致你的结论错误:
1、DOL表需要做reorg的原因不是因为有聚簇索引,请仔细看看DOL表和APL表的差异,仔细了解reorg的目的,reorg不是为了让DOL表按聚簇索引排序。
2、请从查询的角度来分析,为什么我说APL表在“范围查询”上有优势。如果查询结果只有一条纪录,任何表的查询代价是相同的。分析过程请从I/O的角度着手。
3、APL表上如果有聚簇索引,insert/delete/update可能会导致页的分裂或合并。APL表的聚簇索引不需要类似reorg的维护(其实reorg也不是维护聚簇索引的,请了解第一条后,你会明白)。

请原谅我采用这种提问引导的方式,我想直接给你答案可能影响不会深刻

PS:
这个帖子我加精,希望更多的人了解ASE的索引结构,以及索引如果影响SQL效率,这样大家在做数据库设计的时候能够有更多的考虑。


__________________
if you want something done right, hire a professional
只看该作者    顶部
相关内容


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