问题如题!
我知道使用B树建立的索引的时候,非叶子节点里面会包含这些信息:
键、子树引用,数据记录。
这个数据记录是什么意思呢?
是数据库里面某个表中某个记录在内存中的地址还是该记录的完整信息?
谢谢!
还想问一下,一般是用B-树还是用B+树建索引?
我知道使用B树建立的索引的时候,非叶子节点里面会包含这些信息:
键、子树引用,数据记录。
这个数据记录是什么意思呢?
是数据库里面某个表中某个记录在内存中的地址还是该记录的完整信息?
谢谢!
还想问一下,一般是用B-树还是用B+树建索引?
解决方案 »
- 关于执行计划的一些疑问
- 求SQL语句,大侠帮忙,都郁闷好久了
- 外键的概念
- 很棘手的记录数重复问题,用了网上的方法不行啊
- 怎样实现点击按钮,将光标所在行的某列参数传到另一个form,显示出另一个表的某条相关记录?
- linux 下oracle 10g安装成功后如何启动sqlpuls??
- (在线)这样的一个简单存储过程,竟然编译不通过,大家帮我看看...
- SUBSTR如何反向取值?
- 100分求rapid sql6.0的crash!!!!!
- orcale存储过程中update不成功
- 添加了java数据源EncryptBean 如何用存储过程调用?下面是我的代码,高手指教
- 求教:关于在Oracle的存储过程中动态调用函数并获取返回值的问题
这个不是偶们能够控制修改的,是数据库内部的数据结构。索引节点应该包含的是作为索引的字段的值和物理地址rowid,
当然非叶子节点还需要包含父指针/子指针之类的咚咚,具体确实不清楚,当年C/C++都没有学好
羞愧ing
如果我有一张用户表,里面包含有500个用户记录,那么建立这个B树索引就需要500个节点,也就是500个内存页,这个浪费是在是太大了吧。
??
继续求教!
索引也是存储在硬盘/磁带/something else上的,只有读取索引时候才会读取到内存中阿,rowid 应该占据6-8个字节吧(不是特别肯定,大概的一个数值)怎么会占据一个内存页?
因为数据库里面索引的数据结构是B树,而B树中的每个节点都占一个内存页,也就是说,一棵B树,如果有10个节点,那么它将占据10个内存块,在搜索索引的时候,每次搜索一个节点,都必须进行一次辅存的读取(当然,如果一次性把所有索引节点都存入内存中就不需这么麻烦,但是有的机器内存很小,比如说一个文曲星,为内部的字典建立一个B树索引,那么可能每次都只能读取一个节点到内存中)。所以才会有我上面的那些问题,麻烦解释一下,谢谢了:)
谁说的啊?
Oracle好像不开源的说,源码估计是没有希望看的
楼主考虑去甲骨文,或者相关的数据库优化软件开发公司。他们才有可能有源码
这种索引的节点分三种:root节点,非叶子节点,叶子节点。
非叶子节点存储的是键值和指向下级非叶子节点或叶子节点的物理位置的指针。
叶子节点存储的是键值和对应记录的物理位置的指针。
B+索引不会包含数据记录。