MySQL数据库 --- MySQL索引事务

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
我们知道二叉搜索树的 中序遍历结果是有序的.如果要查找 id<6 且 id>3的数据.可以先找到 id =3 再找到 id = 6 然后中序遍历在找到 3~6之间的数据就可以了.相比于哈希表,二叉树能处理范围查找,那为什么不用二叉搜索树呢?

原因: 如果使用二叉搜索树,二叉树每个节点最多有2个叉,当数据量大时,树的高度就会较高,最终操作的效率也会非常低,而且二叉搜索树获取到中序遍历的效率也不是很高效O(N).这样效率很低,就跟普通查找效率差不多了.

1.3.3 什么是B树

在这里插入图片描述

B-TREE的优势:

不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快

叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据

通过中序遍历,可以访问树上所有节点

1.3.4 什么是B+树

真实的索引是用的B+树.

在这里插入图片描述

B+TREE的优势:
  1. 仍然是N叉树,层级小,非叶子节点不再存储数据,数据只存储在同一层的叶子节点上,B+树从根到每一个节点的路径长度一样,而B树不是这样.(表示查询任何一条记录速度是比较平均的,不会出现效率差异大的情况.)

  2. 叶子之间,增加了链表(图中红色箭头指向),获取所有节点,不再需要中序遍历,使用链表的next节点就可以快速访问到

  3. 范围查找方面,当定位min与max之后,中间叶子节点,就是结果集,不用中序回溯(范围查询在SQL中用得很多,这是B+树比B树最大的优势)

  4. 叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;非叶子节点存储记录的PK,用于查询加速,适合内存存储

  5. 非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引

1.4 使用场景


要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  • 数据量较大,且经常对这些列进行条件查询。

  • 该数据库表的插入操作,及对这些列的修改操作频率较低。

  • 索引会占用额外的磁盘空间。

满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。

反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。

1.5 索引的使用


创建主键约束( PRIMARY KEY)、唯一约束( UNIQUE)、外键约束( FOREIGN KEY)时,会自动创建对应列的索引。

1.5.1 查看索引

show index from 表名;

示例:

在这里插入图片描述

1.5.2 创建索引

create index 索引名 on 表名(字段名);

示例:

在这里插入图片描述

1.5.3 删除索引

drop index 索引名 on 表名;

示例:

在这里插入图片描述

1.6 MySQL中的索引类型


  • 普通索引 : 允许被索引的数据列包含重复的值
  • 唯一索引 : 可以保证数据记录的唯一性
  • 主键索引 : 是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字PRIMARY KEY来创建
  • 联合索引 : 索引可以覆盖多个数据列,如像INDEX(columnA,columnB)索引
  • 全文索引 : 通过建立倒叙索引,可以极大的提升检索效率,解决判断字段是否包含的问题,是目前搜索引擎使用的一种关键技术,可以通过ALTER TABLE table_name ADD FULLTEXT(column); 来创建全文索引

2. 事务

=========================================================================

2.1 为什么使用事务


现有一个数据表,存储了一些人的银行账户,

现在有一个人A需要向B转账3000元.

此时就需要执行两个操作.

  1. A的账户余额 - 3000

  2. B的账号余额 + 3000

假如在执行操作1的时候,执行之后,网络出现错误,或 数据库挂了,A的钱少了B的钱没有增加,3000就凭空消失了?

解决方案: 使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败

2.2 事务的概念


事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务.

2.3 事务的基本特性(ACID)


事务的基本特性称为 “ACID”

  • 原子性(atomicity,或称不可分割性): 事务中的若干操作,要么全部执行成功,要么就都不执行.(这里的不执行,并不是真的不执行,而是一旦中间的某个步骤执行出错,就把前面已经执行完毕的步骤回滚(rollback)回去.)

  • 一致性(consistency): 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。执行事务前后,数据始终处于一种合法的状态.(例如转账操作,减账户余额的时候,不能把账户减成负数)

  • 隔离性(isolation,又称独立性): 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

  • 持久性(durability): 事务一旦执行完毕,此时对于数据的修改就是持久生效的(数据存到磁盘中就是持久的.存到内存中就是不持久的)

2.4 事务的使用


( 1) 开启事务: start transaction;

( 2) 执行多条SQL语句

( 3) 回滚或提交: rollback/commit;

说明: rollback即是全部失败, commit即是全部成功

测试表

drop table if exists accout;

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
链图片转存中…(img-66t6T3nW-1714712962890)]
菜鸟面试经验
[外链图片转存中…(img-BWvgY6Jy-1714712962890)]
蚂蚁金服面试经验
[外链图片转存中…(img-w1lANnBl-1714712962891)]
唯品会面试经验
[外链图片转存中…(img-eshGqanc-1714712962891)]

因篇幅有限,图文无法详细发出
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值