楼主: beginner_bj

[精华] 神奇的APL表

[复制链接]
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
11#
 楼主| 发表于 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,想做,但没办法做。

个人看法,望指正。

使用道具 举报

回复
论坛徽章:
47
生肖徽章:牛
日期:2007-09-26 17:01:04马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14奥运会纪念徽章:摔跤
日期:2012-09-18 10:12:52版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08生肖徽章:蛇
日期:2007-09-26 17:01:59
12#
发表于 2007-7-27 10:08 | 只看该作者
1、APL表的聚簇索引保证[/COLOR] 数据的排列是按照索引的顺序来排列。APL索引树的页节点就是数据。因此在范围查询结果时,当通过索引定位到第一条纪录时,后续的结果集可以直接通过页链查找,不再需要从索引定位到页,再定位到纪录。
2、DOL表上的聚簇索引不保证[/COLOR] 数据的排列是按照索引的顺序来排列(不管是不是做了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的效率降低(因为会导致页的分裂或者合并)。

使用道具 举报

回复
论坛徽章:
47
生肖徽章:牛
日期:2007-09-26 17:01:04马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14奥运会纪念徽章:摔跤
日期:2012-09-18 10:12:52版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08生肖徽章:蛇
日期:2007-09-26 17:01:59
13#
发表于 2007-7-27 10:16 | 只看该作者
DOL表上的聚簇索引并不保证数据会按照索引的顺序排列(而APL表的聚簇索引是严格保证数据按照聚簇索引的顺序排列),而reorg的目的是因为DOL表的页结构导致。DOL表为了保证大并发下的insert/update/delete,因此它的页结构和APL表的页结构不同,而这种结构导致数据在频繁的insert/update/delete后,空间的浪费会比较严重,而reorg是为了整理回收空间而使用的,并不是为了使数据保持聚簇索引的顺序(DOL的聚簇索引并不要求数据按索引顺序排列)。

使用道具 举报

回复
论坛徽章:
47
生肖徽章:牛
日期:2007-09-26 17:01:04马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14奥运会纪念徽章:摔跤
日期:2012-09-18 10:12:52版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08生肖徽章:蛇
日期:2007-09-26 17:01:59
14#
发表于 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[/COLOR]  .
Instead, the index directs the placement of rows to pages that have adjacent or
nearby keys.

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

使用道具 举报

回复
论坛徽章:
12
茶鸡蛋
日期:2013-07-01 11:36:19暖羊羊
日期:2015-06-15 11:12:272015年新春福章
日期:2015-06-08 16:49:35懒羊羊
日期:2015-05-01 14:32:02马上有对象
日期:2015-02-08 22:59:56马上有钱
日期:2014-08-04 17:28:09问答徽章
日期:2014-03-25 22:41:342014年新春福章
日期:2014-03-15 11:26:24马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11
15#
发表于 2007-7-27 10:26 | 只看该作者
观望

使用道具 举报

回复
论坛徽章:
47
生肖徽章:牛
日期:2007-09-26 17:01:04马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14奥运会纪念徽章:摔跤
日期:2012-09-18 10:12:52版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08生肖徽章:蛇
日期:2007-09-26 17:01:59
16#
发表于 2007-7-27 10:44 | 只看该作者
最初由 1017of 发布
[B]观望 [/B]


把灌水的拖出去。磨树。

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
17#
 楼主| 发表于 2007-7-27 20:46 | 只看该作者
我中午敲的字呢?怎么都不见了?

难道我当时没发吗?

使用道具 举报

回复
论坛徽章:
47
生肖徽章:牛
日期:2007-09-26 17:01:04马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14奥运会纪念徽章:摔跤
日期:2012-09-18 10:12:52版主4段
日期:2012-05-15 15:24:112012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08生肖徽章:蛇
日期:2007-09-26 17:01:59
18#
发表于 2007-7-30 10:04 | 只看该作者
最初由 beginner_bj 发布
[B]我中午敲的字呢?怎么都不见了?

难道我当时没发吗? [/B]


那就再发一遍了。

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
19#
 楼主| 发表于 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表优势明不明显,还需要用测试数据说话)

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10授权会员
日期:2007-10-23 20:58:17优秀写手
日期:2014-03-01 06:00:03
20#
 楼主| 发表于 2007-7-31 01:50 | 只看该作者
白天太忙了,下次回帖要到明天晚上了。

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

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表