什么是索引?为什么要使用B树作为索引数据结构?

MySQL的事务特性

1.原子性:原子性就是这个事件要么执行完,要么没执行,不会存在中间状态,与C++中华那个加锁避免多线程竞争是一个道理;

2.一致性:保持事件的操作对象双方某数据之和是不变的,就以转账为例,A转给B100块,那么A的余额多100,B的余额就必须少100;

3.隔离性:隔离就是独立的,A事件正在进行时,B事件是看不到A时间的变化过程的,只能看到A事件的起始和结束状态;

4.持久性:事务提交上的数据会被永远的保存到数据库中,即便系统突然崩溃数据也不会发生变化;

MySQL索引

MySQL索引种类

普通索引:没有什么限制,可以字段中可以出现多个重复的数据,也可以为空

唯一索引:字段中的数据不可以重复,但是可以为空,前提是该字段可以为空

主键索引:通常在建表的时候就会加上的索引,就以主键类比即可,唯一+不为空

组合索引:某两个字段通常会被配合一块查询,所以就同时组合加上索引

全文索引:知道即可

索引原理

B树数据结构;

先不说什么是B树,我们就谈谈元组在表中的存储是什么数据结构--->指针数组

每一个指针指向一个元组;所以我们查找某一项数据的时候不就需要遍历数组 吗;那遍历数组的复杂度不就是On吗,

对吧,先不说什么是索引,就单看现在你面前有个数组,你要查询,你怎么优化;

-->树型结构,对吧!

我们都知道搜索二叉树的就是用来查找的树型结构,一般时间复杂度是Ologn,对吧这就实现了优化,

那么回到上面的问题,我们该如何优化查找元组,就是一个优化数组搜索的问题罢了;

在MySQL中不是用的二叉搜索树,而是用的B树,先简单说一下B树也是一个树,只不过是跟二叉搜索树不一样罢了,不要以为是什么高大尚的数据结构;我们先简单把他理解成是多叉树!!

那么我们先想想为什么不用 二叉搜索树 呢?-->效率问题!!!


>我们先来划分一下立场,二叉搜索树搜索的数据是不是在内存中,内存中搜索是不是很快;

我们再来看看数据库查找数据是在哪里,回答我!!!! 是不是在硬盘上进行 IO 啊,他是与硬件交互的,怎么跟内存中茶轴相比,a?对不对?

那二叉搜索树,可不可以在进行优化一下,毕竟二叉搜索树他在搜索他也就两个叉,我如果用多个叉来构建数据结构,是不是会更加的便捷;从树的形态上看,树的高度是不是就会变低,宽度变大,这意味这什么?这意味着我搜索数据可以少走弯路了,对不?

所以知道为什么不用二叉搜索树了吧,但是多叉树是一个十分宽泛的词, 对不,为什么要专门为二叉搜索树起名叫二叉搜索树的呢,对吧,那么我们多叉搜索树也要有个范!!!

-->就叫做b树,懂了吧!!!!

集体b树的实现可分为多维的,可以是3维,4维,意思就是一个节点分治是3个4个罢了;

所以,懂了吧!!!

相关推荐
转转技术团队33 分钟前
"慢SQL"治理的几点思考
数据库·mysql·性能优化
bingbingyihao35 分钟前
Windows下安装常用软件--MySQL篇
windows·mysql
m0_653031361 小时前
加新题了,MySQL 8.0 OCP 认证考试 题库更新
数据库·mysql·开闭原则
hrrrrb1 小时前
【MySQL】锁机制
数据库·mysql
PacosonSWJTU1 小时前
python基础-07-模式匹配与正则表达式
python·mysql·正则表达式
sakabu3 小时前
Linux安装MySQL数据库并使用C语言进行数据库开发
linux·c语言·数据库·笔记·mysql·数据库开发
ヾ慈城4 小时前
【MySQL | 七、存储引擎是什么?】
数据库·mysql
榛果咖啡有点苦4 小时前
高频SQL50题 第四天 | 1251. 平均售价、620. 有趣的电影、1075. 项目员工 I、1633. 各赛事的用户注册率
mysql
SHUIPING_YANG4 小时前
MySQL 慢查询日志开启与问题排查指南
android·mysql·adb
gywl4 小时前
【MySQL】索引 & 事务
数据库·mysql·事务·索引·隔离性