当前位置: 首页 > news >正文

MySQL的索引和事务

目录

1、索引

1.1 查看索引

1.2 创建索引

1.3 删除索引

1.4 索引的实现

2、事务


1、索引

索引等同于目录,属于针对查询操作的一个优化手段,可以通过索引来加快查询的速度,避免针对表进行遍历。

主键、unique和外键都是会自动生成索引的。

索引能提高查询的速度,但也是有代价的。

1、占用更多的空间,生成索引是需要一系列的数据结构,以及一系列的额外的数据来存储到硬盘空间。

2、可能会降低插入、修改、删除的速度。

1.1 查看索引

使用 show index from 表名; 来查看索引

例如:


1.2 创建索引

使用 create index 索引名 on 表名(列名); 来创建索引

例如:

注意:

创建索引时,如果表中的数据很多,创建索引容易使服务器卡住,就需要另一台机器,在MySQL中部署相同的表,创建所需要的索引,然后导入数据替换。


1.3 删除索引

使用 drop index 索引名 on 表名;来删除索引

自己创建的索引可以删除,如果是自动创建的索引,不能删除。

例如:


1.4 索引的实现

索引也是通过一定的数据结构实现的,MySQL的索引是一个改进的树形结构 B+树(N叉搜索树)。

B树

B树是通过区间来进行分支的,每个节点的度都是不确定的,一个节点保存N个key,就可以划分出N+1个区间,每个区间都可以衍生一系列的子树。

一个节点中,虽然可以保存N个key,但不是无限制的,达到一定的规模,就会触发节点的分裂,当删除元素达到一定的数目,也会触发节点的合并。

B树(N叉搜索树)

特点:

1、每个节点上有M个key,划分出M+1个区间。

2、进行查询的时候,根据根节点出发,判定当前要查的数据在节点的哪个区间内,再决定下一步往哪走。

3、进行添加和删除元素时,可以涉及到节点的拆分和合并。


B+树

B+树的特点:

1、B+树也是一个N叉搜索树,一个节点上存在N个key,就划分成N个区间。

2、每个节点上N个key中,最后一个就相当于当前子树的最大值。

3、父节点上的每个key都会以最大值的身份在子节点的对应区间中存在,叶子节点这一层,包含整个树的数据全集。

4、B+树会使用链表这样的结构,把叶子节点串起来,此时就可以非常方便的完成数据集合的遍历,并且方便的从数据中按照范围取出一个“子集”。

优点:

1、N叉搜索树,树的高度是有限的。

2、非常擅长范围查询

3、所有的查询都是落在叶子节点上,查询之间的开销是稳定的。

4、由于叶子节点是全集,会把数据只存储在叶子节点上,非叶子节点只存储一个用来排序的key,所以非叶子节点用不了多少空间,就可以缓存在内存中,提升访问的速度。


2、事务

事务可以把多个SQL语句打包成一个整体,可以保证这些SQL语句要么全部执行,要么一个都不执行,具有原子性的特点。

事务的执行过程:

开始事务:start transaction;

执行各种SQL语句

主动触发回滚:rollback;

事务结束:commit;

事务的原理:

回滚以日志的方式,记录事务中的关键操作,这样的记录是回滚的依据。然后以打印的方式,将内容放在文件中,即使主机掉电,也不会影响,一旦启动主机,MySQL也会重新启动,发生回滚操作。

事务的特点:

1、原子性:回滚的方式,保证操作都能执行正确。

2、一致性:事务执行前后,数据不能产生特别大的差异。

3、持久性:事务做出的修改,都是在硬盘上持久保存的,重启服务器,修改仍然有效。

4、隔离性:数据并发执行多个事务时,并发程度越高,整体的效率就越高。


提高并发执行的程度,对提高效率,但也会产生一些问题。

1、脏读问题

一个事务A正在写数据的过程中,另一个事务B读取了同一个数据,接下来事务A修改了数据,导致事务B读到的数据是一个无效数据。

解决方法:

针对写加锁,等写的操作完全执行结束,并且不再修改之后再读,并发性降低了,隔离性提高了,效率降低了,准确性提高了。

2、不可重复读

并发执行事务的过程中,如果事务A多次读取同一个数据,出现不同的情况,就是不可重复读,事务A再读的过程中,事务B修改了数据并提交了数据。

解决方法:

针对读操作进行加锁,读的时候不能再修改数据。

3、幻读

一个事务A执行的过程中,两次读取操作,数据内容没有改变,但是结果集变了,就称为“幻读”。

解决方法:

保持决定的串行执行事务,完全没有并发,效率最低,隔离最高,内容最准确。


相关文章:

  • 【开源版】likeshop上门家政系统PHP版全开源+uniapp前端
  • Linux开发工具【中】
  • 《构建社交应用用户激励引擎:React Native与Flutter实战解析》
  • WiFi出现感叹号上不了网怎么办 轻松恢复网络
  • C++模板【上篇】 —详解模板基础语法
  • 构建高可用性的LVS-DR群集:实现无缝的负载均衡与故障转移
  • 58.[前端开发-前端工程化]Day05-webpack-Git安装-配置-Git命令
  • http协议理解
  • 量子密码的轻量级通信协议笔记
  • Office宏病毒钓鱼-打点突破
  • 【嵌入式开发-LCD】
  • mac连接lniux服务器教学笔记
  • 代码随想录算法训练营第60期第三十天打卡
  • QT中的网络请求
  • 【软件设计师:软件工程】11.项目管理
  • V4L2应用程序开发-- 控制流程
  • 枚举 · 例13-【模板】双指针
  • 如何使用极狐GitLab 软件包仓库功能托管 terraform?
  • V 型球阀:多材质多驱动,精准适配复杂严苛工况-耀圣
  • 【UltralyticsYolo11图像分类完整项目-03】Onnx版Cpu预测C++实现
  • 欧盟公布对美关税反制清单,瞄准美国飞机等产品
  • 国家发改委副主任谈民营经济促进法:以法治的稳定性增强发展的确定性
  • 外交部:解放军参加红场阅兵体现了中方对历史的尊重和铭记
  • 碧桂园服务:拟向杨惠妍全资持有的公司提供10亿元贷款,借款将转借给碧桂园用作保交楼
  • 黄仁勋:中国AI市场将达500亿美元,美国企业若无法参与是巨大损失
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销