
Mysql
文章平均质量分 81
Mysql基础使用、事务、文件、索引、InnoDB存储引擎技术实现
胡尚
只要学不死就往死里学
展开
-
Mysql MVCC精简
对于删除的情况可以认为是update的特殊情况,会将版本链上最新的数据复制一份,然后将trx_id修改成删除操作的trx_id,同时在该条记录的头信息(record header)里的(deleted_flag)标记位写上true,来表示当前记录已经被删除,在查询时按照上面的规则查到对应的记录如果delete_flag标记位为true,意味着记录已被删除,则不返回数据。开启事务语句时生成的事务id,而是整个事务中第一次执行更新操作或加排他锁操作的语句时,事务才会真正生成,才会生成真正的事务id。原创 2023-03-07 23:26:06 · 207 阅读 · 0 评论 -
Mysql8.0的特性
窗口函数与 SUM()、COUNT() 这种分组聚合函数类似,在聚合函数后面加上over()就变成窗口函数了,在括号里可以加上partition by等分组关键字指定如何分组,窗口函数即便分组也不会将多行查询结果合并为一行,而是将结果放回多行当中,即窗口函数不需要再使用 GROUP BY。如果想删除某个索引,可以先改为隐藏索引,这个时候隐藏索引是不会被sql语句使用,但还是会进行维护,这样如果此索引还在使用就能立刻改回来进行使用,避免了因为数据量大创建索引的耗时操作。for update。原创 2023-03-07 23:31:43 · 240 阅读 · 0 评论 -
Mysql索引优化
所以理论上count(1)要快。在mysql5.6版本之前,这条sql只会通过辅助索引找到**like **开头的索引,然后拿这些索引对应主键逐个回表找到整条数据,在进行age和position字段的的判断。而Mysql5.6版本就有了ICP优化,它会在使用辅助索引时就会对索引包含的所有字段先判断,过滤掉不符合条件的数据之后再进行回表,这样可以减少回表的次数。对于小表的定义:在决定哪个表为驱动表时,是通过各自表where条件过滤之后,参与join的连接字段的总数据量,如果数据量小则就是小表,作为驱动表。原创 2023-03-07 23:19:03 · 417 阅读 · 0 评论 -
Mysql高级——锁
乐观锁需要我们自己通过version字段来实现,如果更新失败则在代码中进行where重试。而我们常见的读锁和写锁就是悲观锁。乐观锁适合于读多的场景,悲观锁适合于写多的场景共享锁排他锁InnoDB的行锁不是锁的一行记录,而是针对索引加的锁。如果在更新时 where字句后面的字段没有索引或者是索引失效,那么此时行锁则会升级为表锁,(只有可重复读隔离级别才会进行锁升级,RC隔离级别不会)原创 2023-03-07 23:22:24 · 238 阅读 · 0 评论 -
Sql执行流程与Redo log、 Undo log、 Bin log日志文件
开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。默认2个,最大100个。思路是首先通过上面的命令查看到binlog文件的内容,找到要恢复的一个起始和结束位置,在执行数据恢复命令,或者是直接执行整个binlog文件。当进行更新操作时就会生成redo log文件,它是用来保证事务的持久性的,事务提交前就会把内存中的redo log写入到磁盘中。原创 2023-03-07 23:30:12 · 458 阅读 · 0 评论 -
Mysql全局优化参数
此参数用来设置innodb线程的并发数,默认值为0表示不被限制,若要设置则与服务器的CPU核心数相同或是CPU的核心数的2倍,如果超过配置并发数,则需要排队,这个值不宜太大,不然可能会导致线程之间锁争用严重,影响性能。连接对象的创建和销毁都是需要系统资源的,一个连接最小占用内存是256K,最大占用内存是64M。指的是mysql client连接mysql进行操作完毕后,空闲300秒后断开,默认是28800,单位秒,即8个小时。行锁锁定时间,默认50s,根据公司业务定,没有标准值。原创 2023-03-07 23:34:40 · 282 阅读 · 0 评论 -
Mysql 事务知识点与优化建议
所以就会造成:在一个事务中,如果我们不对其他事务新增的数据做更新操作,在整个事务中我们是查询不到其他事务新增的数据,这也就是有些人说解决了幻读问题的原因。如果在一个事务中我们对其他事务新增的数据进行更新操作,我们这时再select是能查询出来其他事务新增的这条数据,这也就是没有完全解决幻读问题。原因是:在可重复读隔离级别下,select是快照读,更新操作是使用数据库中最新的数据做的更新。在这个事务中,即使其他数据表被其他事务更新了,我们在这个事务中读取的还是之前的数据。在可重复读隔离级别下可能会产生。原创 2023-03-07 23:21:14 · 258 阅读 · 0 评论 -
InnoDB存储引擎 索引与算法总结
索引的数据结构与算法、Mysql全文检索原创 2022-01-09 16:31:09 · 666 阅读 · 0 评论 -
Mysql数据库相关各种类型的文件
文章目录参数文件错误日志文件慢查询日志文件查询日志文件二进制日志文件套接字文件pid文件表结构文件表空间文件重做日志文件参数文件Mysql实例启动时,数据库会先去读取一个配置参数文件,用来寻找数据库的各种文件所在的位置以及指定某些初始化参数。这些参数通常定义了某些内存结构有多大等。用户可以通过mysql--help | grep my.cnf 命令来寻找Oracle实例在启动的时候如果找不到配置参数文件的话,是不能完成装载mount操作的。Mysql实例在启动的时候却有点不一样,如果找不到配置参数文原创 2021-12-20 19:40:37 · 1154 阅读 · 0 评论 -
Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
目录标题概念开启一个事务事务的并发问题概念事务:一组sql语句 要么同时成功 要么同时失败MyISAM存储引擎不支持事务 InnoDB存储引擎支持事务事务的acid原则原子性 atomicity :原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性 consistency :事务必须使数据库从一个一致性状态变换到另外一-个一致性状态隔离性 isolation :一个事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰。持久性 durabilit原创 2021-11-11 19:35:20 · 861 阅读 · 0 评论 -
Mysql锁机制,行锁表锁
文章目录锁是计算机协调多个线程访问同一个系统资源的机制锁的分类:从数据的操作类型分为:读锁和写锁从数据的操作粒度分为:行锁和表锁原创 2021-11-13 15:18:59 · 1588 阅读 · 0 评论 -
Mysql,group by分组查询、order by排序查询、join连接查询、union联合查询
这里写目录标题入门概念DQL语言基础查询条件查询入门概念DB:数据库 databaseDBMS:数据库关系系统 Database Management SystemSQL:结构化查询语言 Structure Query Language数据库数据表字段mysql安装成功后,比较常见的命令:mysql [-h 主机ip -p 端口] -u 用户名 -p回车输入密码 登录shwo databases; 登录成功后显示所有数据库use 数据库名; 打开数据库show ta原创 2021-11-09 18:53:21 · 1433 阅读 · 0 评论 -
Mysql InnoDB存储引擎 —— 数据页
文章目录页用户数据区域页目录多页页页是InnoDB存储引擎对磁盘进行io操作时最小的数据存储单位。索引B+Tree的每一个节点其实都是一页。InnoDB存储引擎最小的执行单元是页,一页16KB大小。页的主要作用就是提高性能,减少磁盘io的次数。在MySql官网中,介绍一页总共有如下的内容主要的一些结构如下:用户数据区域有这样一个问题,新增几行数据,新增时明明是无序的,可以查询出来时,主键却有序了。这是为什么?在我们批量往数据库中新增一行数据时,首先会将新增的数据存储在一页中,在页里面原创 2021-12-07 15:55:10 · 559 阅读 · 0 评论 -
MySql的创建数据表、约束、外键约束的创建修改删除、级联操作
目录标题对数据库的操作数据表的操作DDL 数据定义语言创建:create修改:alert删除:drop对数据库的操作数据库的创建:create database 数据库名;数据库如果不存在就创建:create database if not exists 数据库名;更改数据库的字符集:alert database 数据库名 character set gdk/utf8;数据库的删除:drop database if exists 数据库名;数据表的操作数据表的创建:create原创 2021-11-11 19:20:35 · 3487 阅读 · 0 评论 -
Mysql流程控制结构,if函数、case结构、if结构、循环结构
目录标题if函数case结构if结构循环结构if函数if函数语法:if(表达式1,表达式2,表达式3);如果表达式1的执行结果为true,则执行表达式2,否则执行表达式3.case结构语法一:类似于java的switch语句case 变量|字段|表达式when 常量1 then 要显示的值或语句;when 常量2 then 要显示的值或语句;...else 要显示的值或语句;语法二:类似于多重ifcase when 条件 then 要显示的值或语句;when 条件 the原创 2021-11-12 13:31:30 · 566 阅读 · 0 评论 -
Mysql视图、变量、存储过程、函数
目录标题视图概念视图的创建视图的修改视图的删除与查询视图的更新变量系统变量自定义变量用户变量局部变量存储过程带in模式带out模式带inout模式删除和查看信息函数视图概念视图其实就是一个虚拟表,具体的使用和普通的数据表一样,是Mysql5.0.1版本提出的新特性,它其实就是将一组复杂的sql语句进行封装。视图的好处是:可重用sql简化复杂的sql保护数据,提高安全性视图的创建语句:create view 视图名as查询语句一个案例如下:查询姓名中包含a字母的员工姓名、部门名原创 2021-11-11 20:21:38 · 383 阅读 · 0 评论 -
Mysql慢查询日志,查询截取分析
目录标题慢查询日志慢查询日志分析工具Show Profile全局查询日志慢查询日志mysql提供了一种慢查询日志的功能,该功能默认是关闭的,我们可以设置一个阀值,就比如3秒钟,只要是执行的sql语句超过了我们定义的阀值就会被记录下来。查看是否开启了慢查询日志SHOW VARIABLES LIKE '%slow_query_log%';默认情况下,slow_query_log变量的值为OFF,表示慢查询日志是禁用的。slow_query_log_file变量表示慢查询的日志文件存放路径,可以原创 2021-11-13 11:44:11 · 1005 阅读 · 0 评论 -
MySql DML语言新增多行数据、修改删除多个表
这里写目录标题新增修改删除DML语言——数据操作语言新增语法一:insert into 数据表名(字段1,字段2......字段n) values(值1,值2...值n);这种语法需要注意的地方就是字段的个数要和值对应如果字段不允许为null就必须要给值,如果允许为null就可以在values的括号中写一个null数据表名后面的括号可以省略,如果省略则默认插入整张表的数据语法二:insert into 数据表名set 字段1=值1,字段2=值2......;上面两种语原创 2021-11-09 19:47:13 · 397 阅读 · 0 评论 -
Mysql索引底层结构的分析
索引是帮助mysql快速获取数据的数据结构,索引的本质就是一种数据结构。目的是提高查询效率,类比字典。也可以理解为 排好序的快速查找数据结构数据库系统除了存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。例如下图就是一种可能的索引方式实例:如果不加索引,Mysql在底层的执行过程其实是把每一行数据记录从磁盘读取到内存中,然后进行查询条件的比对,每一次读取数据都是一次磁盘IO。早期的Mysql索引还原创 2021-12-07 15:47:24 · 270 阅读 · 0 评论 -
Mysql数据库 InnoDB存储引擎中Master Thread的执行流程
master Thread所做的事,该线程主要是有主循环、后台循环、清理循环、暂停循环组成。innodb1.0.X之前,主循环所做的事情主要是分为两个部分,第一部分就是每秒种所做的事情,第二部分就是每10所做的事情。每秒所做的事情:每秒都会刷新日志文件至磁盘每秒判断脏页所占的比例来决定是否要刷新,刷新100个每秒判断磁盘io是否大于5次来决定是否要合并插入缓冲,如果没有用户事件就跳转至后台循环每十秒所做的事情:如果磁盘io前十秒加起来没有超过20次就进行脏页刷新操作,刷新100个清理U原创 2021-12-10 16:40:22 · 512 阅读 · 0 评论 -
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
InnoDB存储引擎是Mysql数据库使用很广泛的一个存储引擎,底层的一些实现机制也值得我们去探究,它底层使用了很多的机制来保证数据的安全性与效率。本文所探究的主要是对脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log的刷新清理。原创 2021-12-14 22:13:38 · 1238 阅读 · 0 评论 -
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
文章目录Buffer Pool概念几个问题redo logBin logUndo logChange BufferBuffer Pool概念上面我们了解了InnoDB存储引擎页的概念,但我们并不知道页在磁盘中是如何存储,在内存中又是如何存储?Buffer Pool是内存中的一块区域,当我们想查询一条数据,首先会在磁盘中找到存放这条数据的某一页。然后将这一页的数据复制到Buffer Pool中如果接下来另一个客户端也是查询这条数据的话,那么就会直接在Buffer Pool中获取。如果是修改语原创 2021-12-07 16:14:47 · 1085 阅读 · 0 评论 -
Mysql索引,索引的优化,如何避免索引失效案例
目录标题索引简介索引简介索引其实就是排好序快熟查找的数据结构。索引的目的就是帮助我们快速查找数据。数据库除了存储数据之外,还维护着满足特定查找算法的数据结构,这种数据结构以某种方式引用指向数据。我们就可以在数据结构上快速查找到我们想要查询的数据,这种数据结构就是索引。比如下图就是一种可能的索引数据结构我们就可以通过右边的索引快速找到左边的数据我们对数据表进行修改操作,相应的会对索引也进行修改。索引本身也比较大,不可能全存储在内存中,因此往往是以索引文件的形式存储在磁盘上。索引有几种数据结构的原创 2021-11-12 19:48:30 · 1076 阅读 · 0 评论 -
InnoDB存储引擎关键特性
InnoDB存储引擎包括:插入缓冲 Insert BufferChange Buffer两次写 Double Write自适应哈希索引 Adaptive Hash Index异步IO Async IO刷新临界页 Flush Neighbor Page原创 2021-12-16 10:54:31 · 1523 阅读 · 0 评论 -
Mysql InnoDB存储引擎中的checkpoint技术
InnoDB存储引擎中的CheckPoint技术。目的:Mysql宕机重启后,数据恢复的效率保证Buffer Pool的可用性保证重做日志文件的可用性CheckPoint可以分为两种,第一种当数据库关闭时执行CheckPoint,第二种是刷新一部分的脏页。InnoDB存储引擎选择的是第二种。InnoDB存储引擎有一下四种情况会进行CheckPoint:以一定频率 秒为单位进行CheckPoint当LRU列表中空闲的页不足100个时会进行CheckPoint保证redoLog文件的可用原创 2021-12-10 08:55:39 · 530 阅读 · 0 评论