1.二分查找算法

  二分查找法的时间复杂度为Ο(log2n)。大家如果有兴趣可以去验证一下这个结果,这里我就不做解释了。

  我们具体来感受一下二分查找法有多强大,假设:集合里面有40亿个元素,排序方式为从左往右,依次递增,我们最多需要查找log2 4000000000  = 32次,就可以在40亿个元素里面找到我们需要的元素 。说点题外话:虽然二分查找法很强大,但这并不意味着二分查找法适用于任何场景,因为我们在为业务场景选择算法时,除了算法的时间复杂度,还要考虑空间复杂度,而且越复杂的程序越是容易发生异常。最主要的是二分查找法只能用于依次递增或依次递减的有序集合。

2.二叉查找树

  二叉查找树是采用二分查找法的思维把数据按规则组装成一个树形结构。所以平衡二叉树的深度为Ο(log2n),即从根节点到离它最远的叶子节点的距离为Ο(log2n),二叉查找树的数据结构如下图所示(注:本文所有图片来自其它文章):

  

总结平衡二叉树特点:
(1)非叶子节点最多拥有两个子节点;
(2)非叶子节值大于左边子节点、小于右边子节点;
(3)树的左右两边的层级数相差不会大于1;
(4)没有值相等重复的节点;

3.索引的数据结构——B+树

  数据库的索引结构采用的是B+树。B+树是一种二叉查找树,而二叉查找树又是根据二分查找法的思维组装的一种数据结构。所以,这就是为什么先要介绍二分查找法和二叉查找树的原因。之前我们已经知道了二分查找法的查找效率很高,为什么不用二叉查找树作为索引的数据结构呢?难道B+树的查找速度要比二叉查找树还要快吗?当然不是,我们先来了解一下B+树,

  从上图可知,一个磁盘块即为一个节点,并且数据只存放在叶子结点,非叶子节点存放的是磁盘块的地址,通过磁盘块的地址找到存放数据的磁盘块,这样大大的减少了磁盘的IO操作次数,所以就节省了大量的查找时间。因为程序是在内存里面运行,而数据是放在磁盘块里面的,寻找磁盘块的时间远远大于程序的运行时间,所以B+树的主要功能实际是减少磁盘的IO操作次数。

4.总结

  1.索引可以提高查询效率,但是因为索引的数据结构是一种二叉查找树,这就要求这棵树的结构必须是有规律的,所以,每次进行DML操作的时候,数据库都要重新去维护这棵树的结构,这就导致了DML操作时会产生大量的资源开销。所以,请根据实际业务场景来决定是否使用索引。

  2.事物型数据库的索引原理除了B+树数据结构,还有其它数据结构,但那些数据结构我就没了解过了。大家如果有兴趣可以了解一下。

  3.除了事物型数据库,还有一种分析型数据库,比如数据仓库,数据集市,这些就涉及到大数据的技术了。

  4.本来我以为我可以写好这篇文章,但最后才发现好多地方都解释得不清楚,请多多包涵!

转载于:https://www.cnblogs.com/heyingquan/p/10712929.html

关于事物型数据库的索引原理相关推荐

  1. sql server 创建唯一性非聚集索引语句_数据库专题—索引原理

    深入浅出数据库索引原理 参见:https://www.cnblogs.com/aspwebchh/p/6652855.html 1.为什么给表加上主键? 1.平时创建表的时候,都会给表加上主键.如果没 ...

  2. 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...

  3. [数据库]MySQL索引原理和深度优化

    一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如 ...

  4. Mysql数据库的索引原理

    写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...

  5. SQL数据库之索引优缺点

    SQL数据库之索引使用原则及利弊 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 优点 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.  可以 ...

  6. MySQL数据库篇之索引原理与慢查询优化之一

    主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...

  7. mysql的数据库的索引_MySQL 数据库索引原理与分类

    前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...

  8. 解释最透彻的数据库索引原理

    转载于https://blog.csdn.net/sxb0103/article/details/91488713,个人看完大彻大悟,遂决定记录一下. 使用索引很简单,只要能写创建表的语句,就肯定能写 ...

  9. 深入了解数据库索引原理

    文章转载自:http://www.cnblogs.com/aspwebchh/p/6652855.html 前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术 ...

最新文章

  1. 《Ext JS权威指南》节选:在Visual Studio中实现Ext JS智能提示
  2. Java 语言 集合架构(Set规则集)
  3. 漫画 | 公司测试因提Bug不规范,锒铛入狱~
  4. mysql5.7学习nosql_如何学习NoSQL?
  5. java编译时多态和运行时多态_运行时多态、编译时多态和重载、重写的关系(不区分Java和C#,保证能看懂!)...
  6. 使用AWS使Spring Boot应用程序无服务器运行
  7. 【随记】SQL Server连接字符串参数说明
  8. Freemarker常用技巧
  9. Hadoop配置环境变量(详解版)
  10. 足浴按摩预约下单小程序开发制作功能介绍
  11. C语言执行时进行窗口隐藏
  12. Tangle:不同于区块链的分布式账本
  13. 引用 康奈尔大学剪影
  14. 计算机桌面上的声音图标没了怎么办,电脑声音图标不见了怎么办超详细教程
  15. Redis遇到过的问题(Could not get a resource from the pool)
  16. HyperLynx(二)LineSim的基本操作
  17. 分享一种高效伪随机数生成算法
  18. 中文大写数字转换为阿拉伯数字(java)
  19. dota攻略(dota全部英雄装备合成和英雄打法)
  20. Linux的Shell编程基本语法

热门文章

  1. 你发现了没?Github在七夕搞事情:remote: Support for password authentication was removed on August 13, 2021.
  2. UOJ Round #4 题解
  3. 国外一些好用的UX/UI设计工具和资源分享
  4. 基于MCU_USB的虚拟串口助手实现
  5. STM32单片机---volatile关键字
  6. html中 ul li 横排居中排列
  7. 【王道数据结构】思维导图--5.2二叉树的概念(高清)
  8. c语言xml解析器libxm2
  9. reverse(反转函数)
  10. Chrome 浏览器上最值得使用的8款插件