谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~

Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问。若没有索引,你必须顺序扫描数据来查找值。

一个值的有序列表划分成宽块范围(叶子块),查询时间减少为 log(n)。这是 Oracle 数据库索引的基本原则。

B-tree 索引的上半部分块(分支块)包含索引数据,并指向低一级的索引块。最低级别的索引块(叶子块)包含每个已索引的数据值和用于定位真实行的相应 rowid。叶子块是双向链接的(双向链表)。包含字符数据的列中索引是基于数据库字符集的字符二进制值。B-tree 结构有如下优势:树的所有叶子块都在相同深度,这样,在索引中从任何地方检索任何记录都大约花费相同的时间。

B-tree 自动保持平衡。

All blocks of the B-tree are three-quarters full on the average.

B-tree 对大范围查询提供优秀的检索性能,包括精确匹配和访问查询。

插入、更新和删除操作有效,维护键的顺序,以便快速检索。

B-tree 性能对小表和大表都很好,不会随着表的增长而降低。

Mysql索引的数据结构:B+Tree一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。这样的话,索引查找过程中就要产生磁盘I/O的消耗,所以评价一个索引的优劣的重要指标就是I/O的操作次数。

数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。在实现B- Tree为了达到这个目的,实际中还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

B-Tree中一次检索最多需要h-1次I/O(根节点常驻内存),渐进复杂度为O(h)=O(logmN)。一般实际应用中,m是非常大的数字,通常超过100,因此h非常小(通常不超过3)。Mysql索引的数据结构之所以选择B+树而不是B树,是因为它内节点不存储data,这样一个节点就可以存储更多的key。

此外,在非关系型数据库中,例如Mongo的索引结构也是基于B-tree。具体原理树懒君在这里不多做介绍啦~需要详细有关NoSQL的索引内容,树懒君也找了几篇不错的博客,请移步:MongoDB 索引

需要学习 Oracle、MySQL 中建立、删除索引的教程也可以去本站上面学习哦~

mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?相关推荐

  1. mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表

    展开全部 查询32313133353236313431303231363533e59b9ee7ad9431333431356639一个数据库中的所有表sql语句是show tables: 显示所有数据 ...

  2. qt mysql查询中文相等_请教:Qt如何实现查询数据库中具有中文表名的表

    就好像我上面所说的,你要保证源代码转换后的中文是正确的编码.你估计是 msvc 编译的吧.那货默认 gbk 编码,但 tr 不知道,转换后到内存里面的文字可能就乱码了. 办法好几个,不过不具可移植性. ...

  3. mysql表中的多对多关系表_「一对多」关系型数据库中一对多,多对一,多对多关系(详细) - seo实验室...

    一对多 在关系型数据库中,通过外键将表跟表之间联系在了一起. 一个班级有很多学生,外键维护在学生的一方,也就是多的一方.(在做页面设计的时候,需要把两个表连接到一块查询信息) 建立一个student和 ...

  4. oracle定时任务可以备份么,Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和Linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters ...

  5. mysql连接java程序_实现Java连接mysql

    Java连接mysql数据库,代码经过运行准确无误. 下面为实例----> 用数据库操纵工具(例: SQLyogEnt)操纵mysql建表,或dos下建,如下: 数据库名:scutcs 表名:s ...

  6. mysql的通俗理解_最通俗易懂的理解什么是数据库

    1.什么是数据库呢? 每个人家里都会有冰箱,冰箱是用来干什么的?冰箱是用来存放食物的地方. 同样的,数据库是存放数据的地方.正是因为有了数据库后,我们可以直接查找数据.例如你每天使用余额宝查看自己的账 ...

  7. linux设置定时备份任务,Linux下Oracle设置定时任务备份数据库的教程

    1.查看数据库的字符集 数据库的字符集必须和linux下设置的环境变量一致,不然会有乱码. 以下两个sql语句都可以查到: select * from nls_database_parameters ...

  8. mysql linux err2003_远程连接linux下的mysql Err1045 Err2003解决办法

    本人linux系统 Centos7 1.Err2003 我个人的情况是因为linux中防火墙开启并阻止了3306这个mysql端口的远程连接 解决办法: CentOS 7.0默认使用的是firewal ...

  9. mysql查询父子关系树_swt 生成树[读取Mysql数据库中的父子关系表]

    数据库中的表结构: id        pid 1         0 2         1 3         1 4         2 6         2 5         4 需要生成 ...

最新文章

  1. Excel2003Training(1)-浅谈Excel的5个小技巧
  2. 【linux】内核源代码下载与阅读
  3. 中国科技大学校长朱清时:我的两次“错误”选择
  4. java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
  5. 为什么35岁的C++依然能主导编程世界
  6. IAR 下根据官方库建立 STM32的工程
  7. linux端口对ip开放,Linux 开放IP端口
  8. JAVA Metrics 度量工具使用介绍
  9. 不能编辑access_vcf通讯录编辑器 v3.1.6 vcf通讯录编辑器软件
  10. 什么是全栈工程师,为什么全栈开发用Python,Python web全栈开发究竟有多高薪?
  11. 【转】中国历史上下五千年之朝代变迁
  12. StartActivity的2种用法
  13. Win10下C:\Users\***修改用户名(完全修改)
  14. C++编程练习 计算一元二次方程组解判断是否测试过三种情况
  15. 【问题思考总结】旋转体的体积和函数在直线上下有关吗?【几何+微元】
  16. java+mysql基于ssm企业进销存管理系统【计算机毕业设计】
  17. HDU-2112 HDU Today (字符串转数字,最短路)
  18. 【阿里云高校计划】实现简单的身份证识别系统!
  19. Dapper入门教程
  20. WordPress 高仿 36KR 登录界面

热门文章

  1. C标准库和glibc(C运行库)的关系
  2. Linux数据报文接收发送总结3
  3. 【强化学习】Q-Learning
  4. 仿真RM码,及在高斯信道下的译码性能,对RM采用大数逻辑译码算法
  5. Android-使用FindBugs
  6. 跨域调用报表展现页面的flash打印方法
  7. 如果在安装32位oracle 客户端组件时的情况下以64位模式运行,将出现问题
  8. 初学java之菜单条,菜单,菜单项的设置
  9. Oracle从零开始04——SQL语句03——单行函数
  10. Tomcat源码分析(六)--日志记录器和国际化