0

华为高斯GaussDB 100 索引

章芋文 2019-09-16
968

索引和表是独立的对象

索引和表是独立的对象,它们分别拥有自己的存储空间,并不是放在一起的,所以它们可以存放在不同的表空间(每个表空间是一组数据文件的集合)中。一个表上如果有多个索引,那每个索引也是独立的对象,拥有自己的存储空间。两个索引之间是没有关系,好比字典的拼音索引和部首索引,在编排和使用时都是相互独立的 。


索引和表在磁盘上的存放方式

表和索引的数据都存放在磁盘的数据块中,每个数据块一般固定为8K。数据块是数据读写的最小单位,即使只需要读取一条数据,也会把整块的数据读到内存中,写数据也一样。表中的数据是无序的存放在数据库块中的,两个数据块完全没有关系,同一个数据块中的数据也没有关系。数据在表中的顺序也不一定是录入的顺序,后录入的数据可能在前面。如果想从表中查询某条数据,在没有索引的情况下就只能扫描表的所有数据块了,即全表扫描。这就好比一本书没有目录,要找某个内容只能把整本书翻一遍。与表的无序存放不同,索引是有序存放的。在存放索引的数据块上,数据都是有序的,并且数据块之间使用指针进行关联。


索引和表之间是如何关联的

索引中保存:索引的键值(索引列的值);数据在表中的地址(rowid)。查字典时,根据拼音索引可以找到某个字的页码然后直接到该页查看详细内容。Oracle索引与查字典也很类似,如果要找userid=10的数据,那么就到userid索引中先找到目标数据的地址(rowid),然后根据数据地址到表中查看目标数据的详情。那么,如果要找username=’abc’的数据呢,userid的索引就不好用了,需要使用username的索引了。这就好比你只知道汉字的写法就不能使用拼音检索,而只能用部首查字法了


索引结构

Ø只支持B-Tree索引,不支持Hash、位图等其他类型的索引

Ø树的顶层是根页,根页面存放下一层每个树枝节点的最小key值 

ØKey的顺序为升序,页面内升序搜索使用二分查找 

Ø树干节点的每个key值保存指向下层节点的指针(page id) 

Ø叶子节点每个key值存放指向数据行的指针(row id),所有key都保存索引字段值 

Ø扫描到叶子层后的横向扫描,是为了解决页面分裂后避免每次扫描从新从根页扫描的加速优化

最后修改时间:2019-09-16 09:26:41
「喜欢文章,快来给作者赞赏墨值吧」
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新发布
暂无内容,敬请期待...
数据库资讯
最新 热门 更多
本月热门
近期活动
全部
暂无活动,敬请期待...
相关课程
全部