楼主: grassbell

[精华] 关于索引(index)的中度理解,请指正!

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
31#
发表于 2005-4-7 02:05 | 只看该作者
谢谢楼上各位了
让我也明白了索引数为什么可以达到24层

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
32#
发表于 2005-4-19 08:19 | 只看该作者
最初由 grassbell 发布
[B]1)索引的root,branch,leaf;

~~~Leaf~~~

[php]
SQL> create table t(x char(1024));

Table created.

SQL> create index ti on t(x);

Index created.

SQL> insert into t values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> select file_id,extent_id,block_id,blocks from dba_extents where segment_name='TI';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3          0        249          8

'BLOCK 250 开始存储索引的第一个leaf note'

SQL> alter system dump datafile 3 block 250;

System altered.
[/php]
'trace...'
kdxledsz 0
kdxlebksz 8036
row#0[7001] flag: -----, lock: 2
col 0; len 1024; (1024):  'indexed data value(1024B),第一个31代表1'
31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
......
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 1; len 6; (6):  00 c0 00 da 00 00  'RowID(6B)'
----- end of leaf block dump -----

index leaf note每个entry有5列:
row header(3B)|length(1B)|indexed data value(1024B)|length(1B)|RowID(6B)
这样每个row的大小为:3+1+1024+1+6=1035
db_block_size=8192,
block的默认pct_free=10%,
所以每个block能存储7个rows:
[php]
SQL> select 8192*0.9/1035 from dual;

8192*0.9/1035
-------------
   7.12347826

'再插入6row的数据:'

SQL>begin
  2 for i in 2..7 loop
  3     insert into t values(i);
  4 end loop;
  5 end;
  6 /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> ANALYZE INDEX TI VALIDATE STRUCTURE;

Index analyzed.

SQL> select btree_space,used_space,pct_used,blocks,lf_blks,br_blks from index_stats;

BTREE_SPACE USED_SPACE   PCT_USED     BLOCKS    LF_BLKS    BR_BLKS
----------- ---------- ---------- ---------- ---------- ----------
       8000       7259         91          8          1          0        '只有一个leaf note,没有branch note'

SQL> alter system dump datafile 3 block 250;

System altered.
[/php]
'trace...'
kdxlebksz 8036
row#0[7001] flag: -----, lock: 0
col 0; len 1024; (1024): '31代表1'
31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
...
col 1; len 6; (6):  00 c0 00 da 00 00
row#1[5966] flag: -----, lock: 2
col 0; len 1024; (1024): '32代表2'
32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
...
...
row#6[791] flag: -----, lock: 2
col 0; len 1024; (1024): '37代表7'
37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
...
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
col 1; len 6; (6):  00 c0 00 da 00 06
----- end of leaf block dump ----- [/B]

===========================
SQL> select file_id,extent_id,block_id,blocks from dba_extents where segment_name='TI';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3          0        249          8

'BLOCK 250 开始存储索引的第一个leaf note'

=====================





select出来的第一个block是249,为什么250才开始存储索引的第一个leaf node?难道一个root节点要占据一个block的空间?

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
33#
发表于 2005-4-22 10:27 | 只看该作者
顶!
哪位出来答疑解惑啊?    谢谢!

使用道具 举报

回复
论坛徽章:
0
34#
发表于 2005-4-24 12:57 | 只看该作者
最初由 lijietz 发布
[B]顶!
哪位出来答疑解惑啊?    谢谢! [/B]


你也可以做个datablock dump,你会发现他到底是什么?
DATA SEGMENT HEADER

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
35#
发表于 2005-4-24 19:08 | 只看该作者
应该是这个。
明天回去dump出来看看,谢谢楼上的。

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
36#
发表于 2005-5-12 12:01 | 只看该作者
最初由 玉面飞龙 发布
[B]

So, starting from the bottom of the tree-structure, in the leaf nodes, each index entry occupies a slot or row within the database block.  Each row or index entry has 2-3 bytes used for a row header (i.e. flag and lock bytes), and each column within the row has 1 byte for data length, and then the data itself.  So, it may look like this:
•Row header (3 bytes)
•        Column 0 length (1 byte to store length value of “7”)
•        Column 0 data (7 bytes to store a DATE datatype value)
•        Column 1 length (1 byte to store length value of “6”)
•        Column 1 data (6 bytes to store restricted ROWID value)

Row header  可以为2或者3bytes,那什么情况下? [/B]


同row header structure 一样,如果indexed column 过长,应该会用2 bytes 去存储column长度,不过由于rowid始终很稳定(6 or 10 bytes),可能使用1bytes存储

使用道具 举报

回复
论坛徽章:
63
19周年集字徽章-19
日期:2020-09-23 02:43:002012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
37#
发表于 2005-6-8 18:02 | 只看该作者
最初由 lijietz 发布
[B]
===========================
SQL> select file_id,extent_id,block_id,blocks from dba_extents where segment_name='TI';

   FILE_ID  EXTENT_ID   BLOCK_ID     BLOCKS
---------- ---------- ---------- ----------
         3          0        249          8

'BLOCK 250 开始存储索引的第一个leaf note'

=====================





select出来的第一个block是249,为什么250才开始存储索引的第一个leaf node?难道一个root节点要占据一个block的空间? [/B]


是合并吗?

使用道具 举报

回复
论坛徽章:
151
2014年新春福章
日期:2014-04-17 11:38:13奥运会纪念徽章:皮划艇静水
日期:2012-07-31 15:42:58奥运会纪念徽章:田径
日期:2012-07-10 16:21:10奥运会纪念徽章:跆拳道
日期:2012-06-20 22:07:29奥运会纪念徽章:皮划艇静水
日期:2012-06-16 02:55:21奥运会纪念徽章:曲棍球
日期:2012-06-13 10:09:19蛋疼蛋
日期:2012-05-19 23:20:41迷宫蛋
日期:2012-05-16 17:35:25版主2段
日期:2012-05-15 15:24:11双黄蛋
日期:2012-03-19 19:34:04
38#
发表于 2005-6-9 18:51 | 只看该作者
在稻泥成名一年后,我终于能够看懂他的文章了。这些internal的东西真好玩,怪不得当初稻泥会深陷其中。努力追赶稻泥的脚步

使用道具 举报

回复
论坛徽章:
0
39#
发表于 2005-9-5 11:28 | 只看该作者
老兄:知道自己定义的索引结构怎么用吗?

使用道具 举报

回复
论坛徽章:
3
数据库板块每日发贴之星
日期:2005-10-10 01:01:29数据库板块每日发贴之星
日期:2005-10-13 01:01:302011新春纪念徽章
日期:2011-02-18 11:43:35
40#
发表于 2005-10-17 17:04 | 只看该作者
大力支持

使用道具 举报

回复

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

本版积分规则 发表回复

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