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

【MySQL是怎么运行的】0、名词解释

  1. 聚簇索引:聚簇=索引和数据在一起,又名主键索引,是主键id构建的一颗B+树,非叶节点是主键id,叶子节点是真实数据。其他索引统称二级索引,也称为非聚簇索引。
  2. 覆盖索引:查找的数据就在索引树上,不需要回表。
user(id, name, age, phone)100行初始数据,有主键索引,name和age构建的联合索引
select id, name, age from user where id=?; √ 查找的id, name, age都在主键索引上
select name, age from user where name=? and age=?; √ 查找的name, age都在主键索引上			
select * from user where name=? and age=?; x,需要的phone不在联合索引,需要回表
  1. 回表:从二级索引查询回到主键索引中
select * from user where name=? and age=?; 
1- 获取name和age的索引树
2- 从二级索引叶子节点找到具体的id
3- 获取主键索引(回表,即拿到初始所有数据)
4- 从主键索引叶子节点找到具体的数据返回  
  1. 全表扫描:一行行记录查询,全部回表,少一行都不行
select * from user where id between 1 and 99; x, 没有扫描第100
  1. 索引下推ICP:将服务层非索引的筛选下推到存储引擎层,主要适用于联合索引
select * from user where name=? and age=?
1- 服务端向db发起请求,db连接层建立连接
2- db服务层经过缓存查,解析器解析,优化器优化后生成执行计划
3- 引擎层查磁盘获取到name和age索引树,通过name筛选出一批数据,获取id
4- 从磁盘获取主键索引,通过id进行筛选。
5- sql5.6之前将筛选后的数据返回给服务层,服务层通过phone筛选后返回服务端,5.6之后引擎层直接处理,将处理好的数据返回给服务层,减少了无效数据的传输
6- 如果是联合索引,比如abc联合索引,a=xx and b like %lucas。以前没有icp,会先筛选出a然后服务层筛选b,有了icp后,会在联合索引的b+树种筛选a,引擎层直接筛选b,不需要回表
  1. 事务的ACID特性
    A-原子性:事务内的多个sql同时成功,同时失败,靠undo日志保证
    C-一致性:事务执行前后,数据从一个合法状态转为另一个合法状态,靠业务保证
    I-隔离性:事务之间相互隔离,靠MVCC和锁保证
    D-持久性:持久化到磁盘,靠redo日志保证

  2. 数据并发问题
    脏写:修改其他事物未提交的数据(a将1修改为2,b将2修改为3,a提交,预期是2,但是结果是3,a写的是错的)
    脏读:读取其他事务未提交的数据(a将1修改为2,b读发现结果是2,但是a回滚了,b读的是错的)
    不可重复读:读取到的数据有变化(a读取发现是1,b将1修改为2,a在同个事务内再次读取,发现是2了)
    幻读:行数有变化(a读取发现2行,b新增了1行,a在同个事务内再次读取,发现是3行了)

  3. 事务隔离级别
    读未提交:可以读取其他事务未提交的结果,仅解决脏写(写时加了s锁)
    读已提交:只能读取其他事务提交的结果,解决脏写和脏读
    可重复读(InnoDB默认):同个事务内,读取结果不变,解决脏写,脏读和不可重复读(mvcc读快照)
    串行化(不推荐):串行执行,解决所有并发问题


  4. 读读:一般共享锁(可读不可写),select for update可以给读读加排他锁
    读写或写写:只要有写在,一定加排他锁(不能读也不能写)

  5. 点查:根据索引查询某行数据,一般通过唯一索引查询

相关文章:

  • NetworkManager服务与network服务的区别
  • 机器人路径规划、轨迹优化系列课程
  • Taro-Bluetooth-Print:让蓝牙打印也充满乐趣的开发组件库
  • STL —— 核心组成部分和特性概述
  • uniapp uview 1.0 跨域h5配置多个代理、如何请求接口
  • JavaWeb项目实际部署流程
  • CPS-J/S冲奖第15天:真题解析
  • Spring Boot集成Spring Statemachine
  • 【C++ STL】 容器详解:pair 学习
  • LabVIEW VI Scripting实现连接器窗格自动化
  • JavaScript性能优化实战:让你的Web应用飞起来
  • Nginx 生产环境安全配置加固
  • Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)
  • Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N
  • java Long[] ids转为List<Long> ids
  • Python常用基础类库总结
  • python-leetcode-压缩字符串
  • c++的stl中有哪几种map容器,都有什么应用场景?
  • 【web前端开发】HTML排版标签、HTML语义化标签、常用的文本标签
  • C++11语法糖:auto和范围for循环详解
  • 北邮今年本科招生将首次突破四千人,新增低空技术与工程专业
  • 本周看啥|《歌手》今晚全开麦直播,谁能斩获第一名?
  • 特朗普公开“怼”库克:苹果不应在印度生产手机
  • 特朗普称即将与伊朗达成核协议,外交部:中方愿继续发挥建设性作用
  • 《日出》华丽的悲凉,何赛飞和赵文瑄演绎出来了
  • 梅花奖在上海|话剧《主角》:艺术与人生的交错