查看: 19167|回复: 34

[精华] 讨论:db2得索引

[复制链接]
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
跳转到指定楼层
1#
发表于 2007-6-3 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚才看到大菠萝的问题,突然联想到很多东西自己也不大明白,特开帖讨论。

普通索引,正向索引,逆向索引,ALLOW REVERSE SCANS索引……这些在运用起来有什么不同?为什么?

俺先说俺对索引的理解:索引不过是根据磁盘中数据与用户定义的列所创建的B+树,当使用时,根据优化器的请求将请求范围之间所有数据的RID返回(这里所说的是start/stop key predicate)
所以问题就来了,当创建了索引以后,对于B+树为什么还需要定义是否allow reverse scan呢?在其表面下隐藏了什么东西?
感觉普通的B+树应该完全支持从后往前或者从前往后的检索呀……

(这里俺说的意思是对于唯一的一个索引列,如果有多个索引列自然会有很大不同)

如果大家不赞同俺的理解或者是有什么新的想法欢迎跟帖讨论……
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
2#
发表于 2007-6-3 13:48 | 只看该作者
•        要有效地搜索,决定对键使用升序还是降序,这取决于将最常使用的顺序。尽管当在 CREATE INDEX 语句中指定了 ALLOW REVERSE SCANS 参数时可以按逆向方向搜索值,但是,执行按指定索引顺序的扫描比执行逆向扫描稍微更快一些。这是DB2 V8的规定,DB2 V9默认情况下就是ALLOW REVERSE SCANS

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
3#
发表于 2007-6-3 13:59 | 只看该作者
在同一个列上(如果索引键只有一个)创建一个索引后,再创建一个索引,会失败,DB2会返回
SQL0605W 未创建索引,因为已经存在具有匹配定义的索引 ""。
SQLSTATE=01550

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
4#
 楼主| 发表于 2007-6-3 17:50 | 只看该作者
恩……正向比逆向要快……有意思,很想知道为什么的说~~~而且在index中只包含一列的情况下也是这样吗?

感觉对index的理解还是不能完全融会贯通,请大家再多多补充哦

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
5#
发表于 2007-6-3 19:03 | 只看该作者
在 DB2  V9 中,缺省情况下所有主键、唯一键和索引(除了扩展的索引)都允许逆向扫描。受此影响,优化器可能在某些 SQL 语句中使用逆向索引扫描,因此访问方案可能会更改,并且查询执行时间可能会缩短。此功能还会改进索引维护。

在以前的 DB2 版本中,某些 DB2 用户创建一个正向扫描索引和一个逆向扫描索引以提高应用程序的速度。但是,缺点是要维护两个索引。既然在 DB2 9.1 中缺省启用了逆向扫描,那么上述两个索引就可由启用了逆向扫描的一个索引来代替。

注意:
如果在同一个表中创建了两个索引(一个指定 ASC,另一个指定 DESC)而未在 CREATE INDEX 语句中指定 DISALLOW REVERSE SCANS 选项,则这两个索引将缺省为 ALLOW REVERSE SCANS。在此情况下,将不会创建这两个索引中的第二个索引,同时 DB2 会发出索引重复的警告消息。

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
6#
发表于 2007-6-3 19:05 | 只看该作者
当然你也可以在创建索引的时候指定DISALLOW REVERSE SCANS,这样在V9中你也可以分别使用一个升序一个降序索引

使用道具 举报

回复
论坛徽章:
9
授权会员
日期:2006-06-15 15:15:15会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:532008新春纪念徽章
日期:2008-02-13 12:43:03奥运会纪念徽章:田径
日期:2008-08-19 09:59:402010广州亚运会纪念徽章:高尔夫球
日期:2010-11-22 15:29:49优秀写手
日期:2014-02-28 06:00:13
7#
发表于 2007-6-3 22:10 | 只看该作者
当然你也可以在创建索引的时候指定DISALLOW REVERSE SCANS,这样在V9中你也可以分别使用一个升序一个降序索引,是做不到的,一个列上不能创建两个索引

使用道具 举报

回复
论坛徽章:
233
天枰座
日期:2016-02-02 09:36:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-06-22 19:28:30现任管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-04-08 16:56:552011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
8#
发表于 2007-6-3 23:04 | 只看该作者
这个讨论相当好,呵呵

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
9#
 楼主| 发表于 2007-6-3 23:04 | 只看该作者
呵呵,看起来ibm果然将allow reverse scan作为默认了,到也免了俺去苦苦寻找答案的说……
但是对于table partition中的index大家有什么见解?当用户进行rollout的时候(DETACH),操作可以在很短的时间内进行,个人感觉对于index的维护将在AIC阶段完成。这个时候,如果用户对基表进行检索,其index不是与磁盘数据不能完全吻合么?而新生成的表是否还有对相同列的索引?索引名城又是什么呢?

使用道具 举报

回复
论坛徽章:
233
天枰座
日期:2016-02-02 09:36:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-06-22 19:28:30现任管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-04-08 16:56:552011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
10#
发表于 2007-6-3 23:27 | 只看该作者
table partition 的index问题,Infocenter中并未过多的提及. 我觉得,detach的时候,和data partition 相关的RIDs会变成invalid,而Index scans 会忽略invalid RIDs,在AIC的阶段统一除去

使用道具 举报

回复

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

本版积分规则 发表回复

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