MySQL为什么选择B+Tree?

首先理解MySQL索引的几个原则

是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。

工作机制

如上图:以id创建索引,索引数据结构里存储了索引键(关键字)以及对应的值(地址值),当搜寻id=101的数据时,直接找到对应的地址0x123456。时间复杂度为O(1)。

时间复杂度

二叉查找树

二叉树测试地址:

https://www.cs.usfca.edu/~galles/visualization/BST.html

二叉树缺点:

二叉树缺点

平衡二叉查找树

每一个节点与子节点的高度差不能大于1。

平衡二叉树测试地址:

https://www.cs.usfca.edu/~galles/visualization/AVLtree.html

二叉树缺陷:

搜索时IO次数过多,节点数据内容太多。

多路平衡二叉树

多路平衡二叉树测试地址:

https://www.cs.usfca.edu/~galles/visualization/BTree.html

经常变化的字段不要建索引,对B树的维护不好。B树的合并和分裂对性能有损耗。

B+Tree

左闭合区间,id从小到大的递增。数据变动可能是最右边的变动 。

MySQL使用B+Tree的原因:

B+Tree扫库、扫表能力更强。

B+Tree的磁盘读写能力更强。

B+Tree的排序能力更强。

B+Tree的传效率更稳定。

两种类型的表:

两种类型的表

两种表的存储文件类型:

存储的文件

索引用Hash算法的缺点:

无法范围查询

无法排序

InnoDB采取的⽅式是:将数据划分为若⼲个⻚,以⻚作为磁盘和内存之间交互的基本单位,InnoDB 中⻚的⼤⼩⼀般为 16 KB。也就是在⼀般情况下,⼀次最少从磁盘中读取16KB的内容到内存中,⼀次最少把内存中的16KB内容刷新到磁盘中

我们的实际⽤户记录其实都存放在B+树的最底层的节点上,这些节点也被称为叶⼦节点或叶节点,其余⽤来存放⽬录项的节点称为⾮叶⼦节点或者内节点,其中B+树最上边的那个节点也称为根节点。

假设所有存放⽤户记录的叶⼦节点代表的数据⻚可以存放100条⽤户记录,所有存放⽬录项记录的内节点,代表的数据⻚可以存放1000条⽬录项记录,那么:

如果B+树只有1层,也就是只有1个⽤于存放⽤户记录的节点, 最多能存放100条记录。

如果B+树有2层,最多能存放1000×100=100000条记录。

如果B+树有3层,最多能存放1000×1000×100=100000000条记录。

欢迎关注个人公众号:【Lvshen_9】  交流技术

mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引相关推荐

  1. mysql按升序创建索引_Mysql中的降序索引底层实现

    什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引 ...

  2. mysql 去掉复合索引_MySQL性能优化[实践篇]-复合索引实例

    上篇文章最后提了个问题 假设某个表有一个**复合索引(c1,c2,c3,c4)**,问以下查询中只能使用该复合索引的c1,c2,c3部分的有那些 1. where c1=x and c2=x and ...

  3. mysql查看使用的索引_Mysql查看是否使用到索引

    mysql数据库创建索引优化之后,在查询时想看下是否使用到索引, 使用执行计划查看: mysql> explain  SELECT * FROM tb_user WHERE STATUS=1 l ...

  4. mysql 建表时建立索引_mysql 分享建表和索引的几点规范

    一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...

  5. mysql建表语句主键索引_MySQL添加主键、索引

    查看索引 SHOW INDEX FROM  数据库表名 比如:SHOW INDEX FROM order_info; 添加索引 alter table 数据库add index 索引名称(数据库字段名 ...

  6. mysql 连接查询索引_Mysql (四)连接查询和索引

    一.什么是连接查询:就是将二个或二个以上的表,"连接起来"当做一个数据源,并从中去取得所须要的数据.连接查询包括交叉连接查询.内连接查询.外连接查询 (一)交叉连接:交叉连接不带W ...

  7. mysql+index组合索引_MySQL 优化之 index merge(索引合并)

    标签: MySQL5.0之前,一条语句中一个表只能使用一个索引,无法同时使用多个索引.但是从5.1开始,引入了 index merge 优化技术,对同一个表可以使用多个索引.理解了 index mer ...

  8. mysql中b树是什么_MySQL优化中B树索引知识点总结

    为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太长, 3.或等待时间太长 4.sql语句欠佳,以及我们索引失效 5.服务器参数设置不合理 SQL语句执行过程分 ...

  9. mysql主键和唯一索引_mysql 主键和唯一索引的区别

    主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键. 唯一性索引列允许空值,而主键列不允许为空值. 主键列在创建时,已经默认为非空 ...

最新文章

  1. 文科生学python系列_文科生学 Python 系列 3:函数
  2. python编程爱心-Python使用turtle库画一个爱心构成的爱心
  3. Mockito框架学习 - how does expected annotation work
  4. 手机usb无法被电脑识别_6种方法解决电脑无法识别移动硬盘
  5. neo4j 返回 return
  6. 目前人们把通用计算机,计算机与信息社会基础知识测试题.doc
  7. 数据结构与算法 第三章 树以及相关遍历方法
  8. 如何利用EasyRecovery恢复c盘已删文档
  9. 三维重建/SLAM笔记_最佳学习路线/攻略
  10. 如何使用Scylla进行OSINT信息收集
  11. java使用百度翻译接口实现前后端翻译功能
  12. WebService--了解wsdl文件
  13. matlab菲涅尔衍射光强分布,矩孔菲涅耳衍射的光强分布.pdf
  14. ArcGIS 实验理论基础二十二 空间插值
  15. SPSSPRO杯第十五届数学中国数学建模网络挑战赛赛题浅评
  16. 罗胖关于管理与企业发展的关系
  17. 【每日一读】Pro-GNN:Graph Structure Learning for Robust Graph Neural Networks
  18. keyberos认证问题导致GSS initiate failed
  19. Python手撸机器学习系列(十五):简单神经网络
  20. sqli-labs第十一关

热门文章

  1. Java Spring里getBean方法的实现
  2. Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
  3. Spring Bean的继承
  4. SAP Cloud Platform mobile service的使用过程
  5. SAP CRM WebClient UI的configuration按钮点击之后,发生了什么事情
  6. 两种方法动态获得ABAP类的class attribute的值
  7. D3 dataset - what is usage of key function in data
  8. Fiori GM4取metadata 从http自动重定向到https原因
  9. 新浪微博和CRM Interaction Center的集成
  10. Cloud for Customer的主页加载逻辑