MySQL 45讲笔记(1-10讲)

news2024/11/22 16:57:22

1. SQL语句如何开始执行?

在这里插入图片描述

MySQL分为Server和存储引擎两部分:
Server层包含连接器、存储缓存、分析器、执行器等,以及所有的内置函数(事件、日期)等等,还有视图、触发器。
存储引擎是负责数据的存储和提取,我们有InnoDB、MyISAM等等。MySQL建表默认InnoDB,但是也可以指定。

  1. 如何去查询?
  2. 连接器先建立 TCP连接,查询你的权限,此次连接,你的权限不会被别人所更改。
  3. 执行select语句,先查缓存,没有命中就继续。大多数情况下缓存比较麻烦,最好不要用指定缓存查询。8.0之后就没缓存功能了
  4. 分析器。分析器用来检查SQL语法,并语法分析。
  5. 优化器。MySQL内部对语句判断如何选择索引。
  6. 执行器。判断你有权限,继续调用InnoDB,返回结果。

2.日志系统

更新流程:
redolog,binlog
redolog WAL技术,先写日志,不往前去更改,4个盘,循环的写。
在这里插入图片描述
redolog是存储引擎层的日志。

binlog是server层日志,追加写。
两阶段提交:
在这里插入图片描述
让两份日志之间的逻辑一致。

3. 事务隔离

  1. SQL标准的事务隔离级别包括:读未提交(read uncommitted)、
    读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。
    读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
    读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
    可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一
    致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
    串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突
    的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

  2. 多版本的并发控制(MVCC),控制了回滚。

4.索引上

  1. 有序数组 哈希,只能用于静态存储引擎,写入了就不能去修改。
  2. 二叉树比较慢,所以InnoDB用B+树。
  3. 主键是一棵B+树,N个叉,只在叶子节点存所有数据的值,也被叫聚簇索引。
  4. 非主键索引的叶子是主键值,所以需要查找到主键值回表,去主键B+树去查值,如果说这个索引是个联合索引,又恰好你只需要这些值,那就不用回表,叫覆盖索引。
  5. 用自增主键可以防止页分裂的降低效率
  6. 最左前缀,

5. 索引下

  1. 覆盖索引:只需要查ID的值,而ID的值已经在k索引树上了,因此可以直接提供查询结果,不需要回表。
  2. 最左前缀:即当你创建了一个联合索引,该索引的任何最左前缀都可以用于查询。 比如当你有一个联合索引 (col1, col2, col3) ,该索引的所有前缀为 (col1) 、 (col1, col2) 、 (col1, col2, col3) ,包含这些列的所有查询都会使用该索引进行查询。
  3. 索引下推:组合索引满足最左匹配,但是遇到非等值判断时匹配停止。name like ‘陈%’ 不是等值匹配,所以 age = 20 这里就用不上 (name,age) 组合索引了。如果没有索引下推,组合索引只能用到 name,age 的判定就需要回表才能做了。5.6之后有了索引下推,age = 20 可以直接在组合索引里判定。

6.全局锁和表锁

MySQL M 里面的锁大致可以分成全局锁、表级锁和行锁三类

  1. 全局锁:做全库逻辑备份,保证备份时是唯一视图,MySQL里是mysqldump,参数single-transaction是做这个的,MVCC也能保证数据正常更新。别的引擎用FTWRL
  2. 表级锁:lock tables,面积太大。MySQL,引入MDL,增删改查时,加读锁,更改表结构,加写锁。读锁不互斥,写互斥,就是阻塞。
  3. 长事务不行,不提交占用MDL,阻塞。解决长事务,kill或者设定等待时间(指定DDL NOWIT/ WAIT N).
    ALTER TABLE tbl_name NOWAIT add column …
    ALTER TABLE tbl_name WAIT N add column …

7.行锁

  1. 两阶段锁:在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束Commit时才释放。这个就是两阶段锁协议。
  2. 更改操作顺序,共同操作的放后面,减少事务之间的等待。(影院买票,插日志,改顾客余额,更改影院余额放最后面)
  3. 死锁和死锁检测:死锁是并发中循环资源依赖,都在都等别人释放,导致都无限等待。A等待B放id2,B等A释放id1
  4. 解决死锁:
    • 设置超时时间,一般不用。
    • 主动死锁检测:解决热点更新的问题。1000个并发线程更改同一行,死锁检测是100万级。
    • 控制并发度,更改电影院账户为10个,分流。

8. 事务如何隔离

  1. 视图概念:一个用查询语句定义的虚拟表,调用的时候执行查询语句生成结果。
  2. InnoDB实现MVCC时用到的一致性视图,consistent read view,支持RC和RR隔离的实现。
  3. 每一行数据有多个由InnoDB发放的Transaction id,MVCC视图可以分为已提交事务,未提交事务集合,未开始事务。分别是可见,部分可见,不可见。
  4. 任务视图三种情况:
    • 版本未提交,不可见
    • 版本已提交,视图创建后提交,不可见
    • 版本已提交,视图创建前提交,可见
  5. 更新数据都是先读后写,这个读,只能读当前值,成为“当前读”。
  6. 可重复读(一致性读)核心就是唯一视图,更新数据只能用当前读,如果要更新数据被别人占用了没提交,就锁住了,称为行锁。

9. 普通索引和唯一索引

  1. change buffer 是InnoDB的内存操作,merge是得到新结果。
  2. 唯一索引要判断,需要加载入内存,已经在内存中的用内存更快。所以唯一索引不需要change buffer
  3. 如果插入值有冲突:
    • 普通索引会将更新记录在change buffer,后面merge后会持久化到磁盘。
    • 唯一索引将数据页读入内存,判断没有冲突,插入后,语句结束。(读入内存需要大量IO,change buffer减少这个操作)
  4. 写多读少场景,change buffer的收益最大。(账单类,日志类)。反之,是副作用。
  5. 尽量选择普通索引,配置change buffer比较好用
  6. redo log WAL,
    • 写操作:如果在内存中数据直接改,没在就change buffer记录中更改,最后都写入redolog中。
    • 读操作:在内存中直接返回,不在的,先读入内存,再根据buffer更改,生成正确版本返回。
  7. redo log节省随机写磁盘的IO消耗,change buffer节省随机读磁盘的消耗。

10. MySQL为什么有时候会选错索引?

  1. 删完再插入再查,时间变长,索引选择错误。是因为优化器选错索引。
  2. 选择索引错误,可以用analyze table t命令来重新统计索引信息。
  3. 矫正选择索引错误
    • force index来强制选择索引,在优化器失效时,可以起到矫正作用。
    • 修改SQL语句,order by b limit 1 -> order by b,a limit 1。a 1000行,也纳入排序,优化器知道a少,就索引a了
    • 新建合适的索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/880017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言暑假刷题冲刺篇——day1

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练 ✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你…

airflow的安装

文章目录 前言一、Airflow基本概念1.概念2. 名词 二、Airflow安装1.Airflow官网2.安装python环境3. 安装anaconda34. 创建airflow虚拟环境5. 安装Airflow1. 更改pip源2. 安装airflow3. 初始化airflow4. 查看版本5. 查看airflow安装的路径6.创建账号7. 启动airflow调度8. 启动ai…

解决hbase节点已下线,但在status中显示为dead问题

工作中需要下线4台hbase小节点,下线完成后使用status 命令查看,有一台为dead状态: 使用status detailed 查看,发现“hd-03"这台节点是dead。 检查各节点配置文件无误,并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重启两个…

改良版自编小程序上线啦---助力孟德尔随机化(Mendelian Randomization)数据挖掘

孟德尔随机化步骤相对简单固定,一共就是3步,但是如果我们一个一个的对研究变量和结果数据进行筛选,也是挺费时间的,在上篇文章《自编R语言小程序助力孟德尔随机化(Mendelian Randomization)数据挖掘》中,咱们自编了一个…

【ppt密码】忘记了PPT的密码,怎么办?

PPT文件设置了保护密码,但是密码忘记了,无法打开PPT文件、无法编辑PPT文件了该怎么办?PPT文件的两种保护密码该如何解密? 首先是打开密码 网上有一种解决方法: 1、重新命名PPT文件,将其后缀改为zip格式&…

字节跳动在PGO反馈优化技术上的探索与实践

背景 随着字节跳动的业务迅速增长,微服务的性能优化工作显得尤为重要,对于头部应用来说,提升若干百分点的性能也能为公司节省巨大的服务器资源成本。 编译器优化是软件性能优化的一种常用方法,相比其它特定的性能优化方法&#…

从零开始 Spring Cloud 11:Elasticsearch II

从零开始 Spring Cloud 11:Elasticsearch II 图源:laiketui.com 在上篇文章中我们学习了 es 的基本功能,在本篇文章中会学习 es 的一些高级功能,比如: 聚合查询自动补全集群部署 数据聚合 类型 **聚合&#xff08…

toB 业务分析

1、 如何透彻分析B端客户的需求? - 知乎我在讲《如何分析客户需求》这门课时,经常会问学员:“开发客户的最大困难是什么?”有人说价格高不好卖,有人说客户需求不好把握,有人说客户地处偏远,素养…

部署WMS仓储管理系统前要知道哪些关键点

随着物流行业的快速发展,WMS仓储管理系统解决方案已成为企业仓储管理的重要工具。然而,在部署WMS仓储管理系统之前,企业需要了解一些关键点,以确保系统的成功实施和高效运行。本文将介绍部署WMS前需要知道的关键点。 1、明确目标与…

一个小时入门 EJB

前置知识 在开始学习Java EE的Enterprise JavaBeans (EJB)之前,以下是一些你可能需要提前了解的技术和概念: Java基础:熟悉Java的基础知识,包括面向对象的概念(例如类、接口、继承和多态等)、基本的数据结…

【从零学习python 】27. Python 函数的使用及嵌套调用

文章目录 函数的文档说明1. 基本使用2. 高级使用 函数应用:打印图形和数学计算目标思考&实现1参考代码1 思考&实现2参考代码2 函数的嵌套调用进阶案例 函数的文档说明 1. 基本使用 def test(a, b):"用来完成对2个数求和" # 函数第一行写一个字…

产品需求管理软件:了解常见选择和功能

产品需求管理软件是一种非常重要的工具。它可以帮助企业更好地理解客户需求,提高产品开发效率并降低成本。本文将介绍一些常见的产品需求管理软件及其主要功能。 “产品需求管理软件有哪些?比较流行的有Zoho Projects、Trello、Asana、Smartsheet等。” …

「并发编程 」

一、 为什么会有线程安全问题 1)程序和CPU间的协作关系 CPU组成 寄存器 存储了从内存加载的数据(从内存中将数据加载到 L1,L2,L3 缓存,再到寄存器) ;寄存器的运行速度比内存快好多个级别&…

哈工大开源“活字”对话大模型

一、介绍 大规模语言模型(LLM)在自然语言处理的通用领域已取得了令人瞩目的成功。对于广泛的应用场景,这种技术展示了强大的潜力,学术界和工业界的兴趣也持续升温。哈工大自然语言处理研究所30余位老师和学生参与开发了通用对话大…

【BUG】docker安装nacos,浏览器却无法访问到页面

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…

单链表相关操作(插入,删除,查找)

通过上一节我们知道顺序表的优点: 可随机存储(O(1)):查找速度快 存储密度高:每个结点只存放数据元素,而单链表除了存放数据元素之外,还需存储指向下一个节点的指针 http://t.csdn.cn/p7OQf …

计算机组成原理之浮点运算

1、浮点运算步骤 ①0操作数的检查,看有无简化操作的可能。 ②比较阶码大小并完成对阶(小阶向大阶对齐)。 ③尾数进行加或减运算。 (在进行尾数加减前,浮点运算器会自动把原码形式的尾数转换成补码形式。) ④…

像素相关知识

物理像素 指的是物理设备上真实的小方块个数,就是拿放大镜看屏幕时看到的像素点, 每个物理像素具体的大小是不固定的,不同设备不相同,由厂家设置 逻辑像素 指的就是我们css用到的px这个单位的像素 像素比(DPR&…

GB/GMP法规内容对沉降​菌、浮游菌监测​点设置相关规定及要求详解

微生物鉴定一直是生物、食品、医药等领域非常重要的监控指标,可以帮助预测药品生产过程以及无菌生产环境的风险。对于许多企业而言,建立厂房环境微生物菌种库对于微生物污染控制来说非常关键,环境菌种库的建立可以帮助制定洁净区消毒灭菌程序…

Leetcode40 组合之和2

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 解题思路:回溯剪枝 代码&#xff…