![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
文章平均质量分 92
MySQL相关知识点总结
每天都要进步一点点
工作日常技术学习、积累、总结
展开
-
MySQL Buffer Pool缓冲池总结
缓存,大家估计都不陌生,如操作系统缓存、Redis缓存等,缓存的作用就是将常见的数据放置缓存里,提高数据的访问速度。MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,避免每次查询数据都进行磁盘IO。数据库中的数据实际上最终都是要持久化到磁盘文件上的,如下图所示【图片摘自于网络】。...原创 2021-06-20 08:32:50 · 1332 阅读 · 2 评论 -
MySQL重做日志(redo log)总结
一、redo log的概念redo log,重做日志,也叫重放日志。和undo log回滚日志一样,都是在数据库发生意外时用来进行数据恢复的,通过前面一篇文章对undo log的总结,我们都知道undo log记录的是数据更新前的样子,主要保证事务的原子性;而redo log则记录的是事务执行过程中的修改情况,redo log主要保证事务的持久性。当数据库对数据做修改的时候,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer poo.原创 2021-06-14 08:03:04 · 5851 阅读 · 0 评论 -
MySQL回滚日志(undo log)总结
一、undo log的概念undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志,在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。二、undo log的作用在MySQL中,undo log日志的作用主要有两个:1、提供回滚操作【undo log实现事务的原子性】我们在进行数据更新操作的时候,不仅会记录redo log,还会记录undo.原创 2021-06-13 08:54:21 · 29545 阅读 · 12 评论 -
MySQL二进制日志(binlog)总结
MySQL二制进日志(binlog),也叫做变更日志(update log),是 MySQL 中非常重要的日志。二进制日志(binlog)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录select、show等那些不修改数据的SQL语句。二进制日志(binlog)主要用于数据库恢复和主从复制,以及审计操作。如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件原创 2021-06-05 15:18:40 · 4392 阅读 · 1 评论 -
MySQL聚集索引与非聚集索引相关总结
一、概述先来问几个问题为什么索引会提高检索速度? 为什么不建议使用SELECT * ? 为什么针对区分度低的字段,例如性别,不要建索引? 为什么不建议使用mysql内置函数,而是要放在业务代码中去处理? 为什么明明建了索引,但是SQL执行还是很慢? 为什么有时候测试环境执行SQL正常能用到索引生产环境却不行? 为什么建议用自增ID做主键索引,而不是UUID、雪花算法等?...原创 2021-06-03 21:10:25 · 1512 阅读 · 0 评论 -
MySQL锁机制总结
目录一、概述二、表锁案例分析加读锁加写锁三、行锁案例分析四、索引失效导致行锁升级为表锁五、间隙锁六、表锁分析七、行锁分析一、概述MySQL的锁可以按照两个维度来划分:1)、按照数据操作的类型分为读锁和写锁。读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响;写锁(排他锁):当前写操作没有完成之前,它会阻隔其他写锁和读锁;2)、安装数据操作的粒度分为表锁和行锁。表锁:锁定整个表的数据,锁定期间其他操作无法操作该表的数据;行锁:只原创 2021-05-23 15:39:38 · 952 阅读 · 0 评论 -
MySQL order by、group by关键字优化
目录一、概述二、创建表以及数据初始化三、order by排序优化四、总结一、概述前面一篇文章介绍了MySQL索引优化的相关知识,我们都知道索引除了提高查询的速度,它还能提高我们排序的速度。在MySQL中,使用order by进行排序的时候,底层有两种方式:1)、使用 index 方式排序,指 MySQL扫描索引本身完成排序,效率高; 2)、使用filesort 方式排序,效率低;我们应当尽量避免发生filesort文件内排序,尽量使用 index索引的方式去排序,有利于提高排原创 2021-05-22 16:27:40 · 526 阅读 · 0 评论 -
MySQL索引优化案例学习总结
目录一、概述二、创建表以及初始化数据三、全值匹配原则四、最佳左前缀原则五、避免在索引列上进行任何操作六、存储引擎不能使用索引中范围条件右边的列七、尽量使用覆盖索引八、避免使用不等于 (!= 或者 <>)操作九、避免使用is null, is not null判空/非空操作十、谨慎使用like通配符模糊查询十一、避免隐式类型转换导致索引失效十二、尽量少用or连接操作十三、联合索引案例分析十四、总结一、概述我们都知道,索引是一种排好序的原创 2021-05-22 10:34:02 · 397 阅读 · 2 评论 -
MySQL中exists和in的区别
网上很多文章都说exists的效率要高于in,其实不然。只能说不一定,exists和in各有各的使用场景,下面我们总结一下MySQL中exists和in的区别:in关键字select * from A where id in (select id from B)#等价于for select id from B:先执行;子查询 for select id from A where A.id = B.id:再执行外面的查询;执行过程:in是先查询内表【select id from B】,再把内原创 2021-05-22 09:53:48 · 3060 阅读 · 0 评论 -
MySQL使用EXPLAIN查看SQL的执行计划
目录一、概述二、explain之id列介绍三、explain之select_type列介绍四、explain之table列介绍五、explain之type列介绍六、explain之possible_keys列与key列介绍七、explain之key_len列介绍八、explain之ref列介绍九、explain之rows列介绍十、explain之Extra列介绍十一、执行计划案例分析十二、总结一、概述我们在项目中或多或少会遇到一些性能瓶颈,比如服务器瓶原创 2021-05-16 14:21:00 · 1263 阅读 · 0 评论 -
Canal中间件学习总结
目录一、什么是Canal二、Canal的工作原理三、Canal应用用场景四、Canal环境搭建五、Canal应用案例实践六、总结一、什么是Canal在项目中,不知道小伙伴们是否有遇到如下一些业务场景:1)、我们修改了商品的信息之后,需要同步商品信息到ElasticSearch中重新建立索引;2)、数据库实时备份;3)、根据数据库日志表,进行日志信息采集并分析;拿到上述需求,或许我们首先能想到的就是定时调度去同步Mysql与ElasticSearch、备份MyS原创 2021-05-02 08:50:43 · 1012 阅读 · 0 评论 -
数据库索引失效的一些场景
目录一、概述二、索引失效的场景一、概述为了提高数据库SQL语句执行效率,我们第一时间想到的就是,通过在表上建立一些合适的索引。但是有时候我们明明在列上面创建了索引,查询条件也用到了该列,但是通过查询执行计划的时候,却发现没有走索引查询。本篇文章我们将总结一些常见的索引的失效场景。二、索引失效的场景【a】存在NULL值条件在设计数据库时,我们应该尽量避免某个列的值为空,如果非要不可避免的要出现NULL值,我们可以给它一个DEFAULT值,比如-1等。如果索引列是可空的,是不会给其建原创 2021-04-07 17:27:41 · 2597 阅读 · 0 评论 -
数据库索引是什么,它的作用是什么?
一、概述数据库索引是为了提高查询速度而对表字段附加的一种标识。简单来说,索引其实是一种数据结构。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。首先我们需要明白为什么索引会提高查询速度,数据库在执行一条SQL语句的时候,默认扫描方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历原创 2020-11-14 21:02:29 · 24597 阅读 · 0 评论 -
面试题之存储过程
一、什么是存储过程简单来说,存储过程就是一组预先编译好的sql语句集。二、创建语法create procedure 存储过程名(参数列表)begin//....存储过程体end;参数列表主要有三种形式:IN : 需要调用者传入 OUT : 作为返回值 INOUT : 调用者传入参数,对应的可以有返回值注意点:由于sql语句默认以";"分号作为分隔符,因此存储过...原创 2020-02-06 10:27:00 · 17325 阅读 · 1 评论 -
面试题之触发器
一、 什么是触发器?数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,就是执行触发器中定义的语句序列。create trigger first_triggerafter inserton empbegindbms_output.put_line("新增成功");end;...原创 2020-02-03 19:23:37 · 1493 阅读 · 0 评论 -
面试题之数据库事务隔离级别
一、简介为了解决脏读、不可重复读、幻读,数据库提供了事务隔离级别的概念,可以最大程度地避免以上三种情况的发生。根据隔离程度从低到高分为:Read Uncommitted(读未提交); Read Committed(读已提交); Repeatable Read(可重复读); Serializable(串行化);二、详解下面对各个隔离级别做一个简介:Read Uncommi...原创 2020-01-01 22:09:49 · 1158 阅读 · 0 评论 -
MySql 5.7.2搭建主从(master/slave)复制
一、简介在实际项目中,很多瓶颈都出现在数据库这个环节,所以如果还是由单台数据库服务器进行服务的话,性能可能不会有很大的提升效果,通常我们会搭建主从服务,然后配合读写分离,读服务器就只负责读操作,写服务器负责插入、更新、删除操作,这样可能有效地分摊单台服务器的压力。本文主要讲解mysql主从复制,主从复制通常有一主一从,一主多从等,这里只介绍最简单的一主一从同步。二、主从复制原理主mys...原创 2019-09-22 16:23:11 · 759 阅读 · 1 评论