|
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)。 |
|