MySQL 核心考点全解:ACID、引擎对比、SQL 执行流程

目录

执行一条SQL请求的过程是什么?

mysql的三大引擎

[A - 原子性(Atomicity)](#A - 原子性(Atomicity))

[C - 一致性(Consistency)](#C - 一致性(Consistency))

[I - 隔离性(Isolation)](#I - 隔离性(Isolation))

[D - 持久性(Durability)](#D - 持久性(Durability))

mysql为什么InnoDB是默认引擎?

mysql的InnoDB与MyISAM的区别


执行一条SQL请求的过程是什么?

由图可以清晰看到

连接器:用于与客户端建立连接,用户管理,校验身份

查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;

解析器:把sql语句进行词法分析、语法分析然后构建语法树,方便后续模块读取sql语句的表名、字段名、字段、语句

执行sql:分为3步

预处理:检查表或字段是否存在;将 select * 中的 * 扩展为表上所有的列

优化:基于查询成本的考虑,选择查询成本最低的计划

执行:根据执行计划执行SQL查询语句,从存储引擎读取记录,返回给客户端

mysql的三大引擎

**InnoDB:**是MySQL的默认引擎,具有ACID事务支持、行级锁、外键约束等特性,有较好的数据完整性和并发控制能力,适用于高并发场景

A - 原子性(Atomicity)

核心:事务是一个不可分割的整体,要么全成功,要么全失败。

C - 一致性(Consistency)

核心:事务执行前后,数据库的数据状态必须是合法、一致的。

I - 隔离性(Isolation)

核心:多个事务同时执行时,它们之间互相隔离,互不干扰。

D - 持久性(Durability)

核心:事务一旦提交成功,数据就永久保存,不会因为数据库崩溃、断电等问题丢失。

MyISAM: 是MySQL另一种场景的存储引擎,有较小的存储空间和内存消耗,并不支持ACID事务、外键约束、行级锁等特性,适用于需要读较多的场景,但在并发写入和数据完整性有一定限制

**MeMory:**把数据存储在内存中,适用于对读性能要求较高的场景,也不支持ACID等特性,并且在服务器重启或崩溃的时候会出现数据丢失

注意InnoDB和MyISAM 与 MeMory不同的是后者是把数据存储在内存,所以可以适用高性能场景

mysql为什么InnoDB是默认引擎?

因为InnoDB有ACID事务支持并且在崩溃恢复和并发性能方面都有不错的能力

事务:InnoDB有ACID(原子性、一致性、隔离性、持久性)事务支持,MyISAM没有

崩溃恢复:InnoDB有redo log日志可以恢复因崩溃而丢失的数据,MyISAM没有

并发性能:InnoDB有行级锁,锁的粒度小,只需要锁住一行,而MyISAM是表锁,锁必须锁住整个表粒度大

并且如果用MyISAM的话,因其使用非聚簇索引的原因,如果发生了数据的修改,那么对应的数据地址也要修改,对性能消耗比较大,而InnoDB只需要对修改的数据排序就行

mysql的InnoDB与MyISAM的区别

事务:InnoDB有事务ACID,MyISAM没有

锁粒度:前者是行锁,粒度小,后者是表锁粒度大

索引结构:InnoDB是聚簇索引(主键索引),只在叶子节点保存了整行数据,其余节点只存储主键值和指针,这样的设计可以让B+Tree的存储数据量增加,只是InnoDB在使用聚簇索引时,辅助索引就只能查到对应的主键值,然后再在主键索引里查询对应的整行数据。MyISAM是非聚簇索引,可以通过辅助键索引和主键索引一起,直接查到数据

count的效率:前者select count(*) from 需要全表扫描才能获取到整个count,但后者用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可

相关推荐
cyforkk20 小时前
MySQL锁机制详解:从乐观锁到悲观锁
数据库·mysql
ShiXZ21320 小时前
指令集-SQL 常用指令速查手册
数据库·sql·mysql·oracle
郑州光合科技余经理21 小时前
海外外卖平台源码改造实战——多语言核心代码实现
java·开发语言·前端·后端·mysql·架构·php
不会写DN21 小时前
MySQL 并发插入竞态问题:原子写入实践指南
数据库·mysql
少时登峰1 天前
【吃透 MySQL InnoDB连载】第 6 章・索引底层原理
数据库·mysql
许彰午1 天前
从Oracle看MySQL聚簇索引的架构性缺陷与缓解之道
mysql·oracle·架构
AllData公司负责人1 天前
数据集成管理|AIIData数据中台实现MySQL、Hive、Oracle一键接入Doris
大数据·数据库·人工智能·hive·mysql·oracle·数据分析
一嘴一个橘子1 天前
mysql 的经验
mysql
数据库小学妹1 天前
MySQL高可用架构选型实战:MHA vs MGR vs InnoDB Cluster原理对比与性能实测
mysql·mgr·mha·架构选型·mysql高可用
ywl4708120871 天前
Mysql,使用B+树存储的索引增删改查效率(七)
数据库·b树·mysql