12
返回列表 发新帖
楼主: wei-xh

[精华] 索引叶子块里被删除的entry有用吗?

[复制链接]
论坛徽章:
249
Jeep
日期:2013-09-04 19:17:57Jeep
日期:2013-10-08 09:46:02Jeep
日期:2013-10-08 16:38:27Jeep
日期:2013-11-22 14:53:46Jeep
日期:2013-11-08 23:59:45Jeep
日期:2013-11-22 17:15:17Jeep
日期:2013-11-22 17:15:17Jeep
日期:2013-11-17 09:59:04季节之章:夏
日期:2015-01-28 14:58:51季节之章:春
日期:2014-12-25 16:20:50
11#
发表于 2013-6-8 16:49 | 只看该作者
本帖最后由 daizyflower 于 2013-6-8 16:49 编辑

,不错的文章,给初学者不少的帮助

使用道具 举报

回复
论坛徽章:
7
2014年世界杯参赛球队: 比利时
日期:2014-06-19 15:28:35优秀写手
日期:2014-10-21 06:00:13马上有房
日期:2014-10-28 13:05:56马上有车
日期:2015-01-15 10:51:27慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39摩羯座
日期:2015-08-18 15:00:45
12#
发表于 2013-7-3 16:50 | 只看该作者
1. 两次查询的逻辑读一样,说明了。。。。索引范围扫描的叶子块数目没变
> 就index range scan而言,逻辑读与叶子块数目有什么关系呢?

2. 假设记录没被清空的情况,步骤应该是先读取到第一个索引块,然后根据索引叶子块上的指针,顺序往后读,读取到第一个包含2111111111112值的叶子节点的时候,查询就终止。
> 为什么“读取到第一个包含2111111111112值的叶子节点的时候,查询就终止”?

3. 这是因为dbms_stats包只统计包含索引entry的块,analyze分析语法会去分析不包含索引entry块。
> 假设我按如下步骤操作,查询出的列leaf_blocks会有值吗?
SQL> create table tb_test(id number);
SQL> create index ind_id on tb_test(id);
SQL> insert into tb_test values(1);
SQL> insert into tb_test values(2);
SQL> insert into tb_test values(3);
SQL> insert into tb_test values(4);
SQL> commit;
SQL> delete tb_test;
SQL> commit;
SQL> analyze table tb_test compute statistics for all indexed columns;
SQL> select leaf_blocks from dba_indexes where index_name='IND_ID';

BTW:我查询的leaf_blocks是没有值的。那“dbms_stats包只统计包含索引entry的块,analyze分析语法会去分析不包含索引entry块”这句话想表述什么意思?

4. 针对标题“索引叶子块里被删除的entry有用吗?”,LZ的结论是什么?
通观全文,下面的阐述应该是楼主的结论:
推论+猜测:索引的entry的删除,只是打了个标记,并没有物理的删除(这一块不属于猜测,事实就是这样的),因此ORACLE还是可以读取到第一个2111111111112的叶子块的时候终止(即使它是被删除的entry)。

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
3
ITPUB社区千里马徽章
日期:2013-08-22 09:58:03问答徽章
日期:2014-04-02 13:20:04马上有对象
日期:2014-12-21 11:18:07
13#
发表于 2013-8-9 20:05 | 只看该作者
zhangfengh 发表于 2013-5-30 13:05
感觉是高水位引起的

全表扫描才读高水位吧

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
3
ITPUB社区千里马徽章
日期:2013-08-22 09:58:03问答徽章
日期:2014-04-02 13:20:04马上有对象
日期:2014-12-21 11:18:07
14#
发表于 2013-8-9 20:08 | 只看该作者
向上爬的蜗牛 发表于 2013-7-3 16:50
1. 两次查询的逻辑读一样,说明了。。。。索引范围扫描的叶子块数目没变
> 就index range scan而言,逻辑读 ...

2. > 为什么“读取到第一个包含2111111111112值的叶子节点的时候,查询就终止”?
因为索引是有序的

使用道具 举报

回复
论坛徽章:
5
2013年新春福章
日期:2013-02-25 14:51:24兰博基尼
日期:2013-10-11 16:43:30优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49
15#
发表于 2013-8-12 22:48 | 只看该作者
有个问题
楼主插入了1000000个11111111,1000000个2111111112,当查询select count(*) from test where id1='11111111111111';的时候,索引选择度为1/2,这样怎么会走索引了呢?我测试的了一下一直都是全表扫

使用道具 举报

回复
论坛徽章:
5
2013年新春福章
日期:2013-02-25 14:51:24兰博基尼
日期:2013-10-11 16:43:30优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49
16#
发表于 2013-8-12 23:59 | 只看该作者
希望讨论得更深入点,

使用道具 举报

回复
论坛徽章:
16
ITPUB元老
日期:2006-12-29 17:11:00秀才
日期:2015-12-25 15:31:102015年新春福章
日期:2015-03-06 11:57:31沸羊羊
日期:2015-03-04 14:43:432012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412010新春纪念徽章
日期:2010-03-01 11:21:02祖国60周年纪念徽章
日期:2009-10-09 08:28:002009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
17#
发表于 2013-9-6 15:47 | 只看该作者
对于batch delete 如果超过15% 表数据,索引应该重建

使用道具 举报

回复

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

本版积分规则 发表回复

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