![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 86
god-jiang
这个作者很懒,什么都没留下…
展开
-
MySQL的binlog日志
前言相信很多用过MySQL开发的程序员们都知道binlog,binlog可以用来归档,也可以用来做主备同步。毫无夸张地说,MySQL能够成为现今最流行的数据库,binlog功不可没,今天就来分享一下binlog里面的内容binlog三种格式对比相信大家都知道binlog有两种格式,一种是statement,一种是row,但是还会从别的资料看到第三种格式,叫mixed,mixed其实就是前面两种格式的混合为了描述三种格式的区别,我先来创建一张表,并且初始化5条数据create table t( i原创 2021-11-20 14:51:12 · 849 阅读 · 2 评论 -
MySQL之索引下推
说到索引下推之前,我们先讲一下“覆盖索引”,也称为“联合索引”覆盖索引一张表名为test,有两个字段name和age,建立联合索引idx(name,age)表的数据为(“张三”,18),(“李四”,24),(“王五”,35)然后开始用select * from test where name='张三'可以直接匹配到(“张三”,18)这条记录。但是使用select * from test where name like '张%'就会查询(“张三”,18)这条记录,然后继续往后查询,直到没有匹配上的记原创 2021-09-04 13:56:18 · 408 阅读 · 0 评论 -
MySQL的间隙锁
你好,我是god-jiang~接上篇的MySQL行锁,我分享了RC隔离级别下的各种常见情况的加锁分析。这次分享的是MySQL间隙锁,分析RR隔离级别下各种常见情况的加锁分析。create table `test`( `id` int(11) NOT NULL, `a` int(11) NOT NULL, `b` int(11) NOT NULL, `c` int(11) NOT NULL, PRIMARY KEY(`id`), UNIQUE KEY unix_key('a'),原创 2021-03-20 17:47:57 · 533 阅读 · 10 评论 -
MySQL的行锁
背景自从过年值班就一直在公司读《 MySQL实战45讲》这本书,当时看完了MySQL的全局锁、表级锁还有行锁和间隙锁。其中的行锁和间隙锁迟迟无法理解,最近趁着有空再次阅读了一遍,并且对照了《深入浅出MySQL》,发现对MySQL锁的理解又上了一个台阶,今天就来分享一下MySQL的行锁。行锁MySQL的行锁又分为共享锁(S锁)和排他锁(X锁)。一般普通的select语句,InnoDB不加任何锁,我们称之为快照读select * from test;通过加S锁和X锁的select语句或者插入/更原创 2021-03-12 22:41:17 · 10174 阅读 · 16 评论 -
MySQL的全局锁和表级锁
前言在真实的企业开发环境中使用MySQL,MySQL肯定不会只有我一个人使用,而是一个团队显式的使用MySQL,或者是业务隐式的使用MySQL,那么多个用户或者客户端连接使用的时候,我们应该考虑一个问题:如果保证数据并发访问的一致性呢?这一篇我就来聊聊MySQL的锁,不涉及MySQL的事务隔离级别。全局锁MySQL的全局锁会关闭所有打开的表,并使全部的表处于只读状态,它们的命令为:# 全局锁,简称FTWRLFLUSH TABLES WITH READ LOCK;# 解锁命令UNLOCK TA原创 2021-02-27 18:35:25 · 1442 阅读 · 10 评论 -
MySQL日志之redo log和binlog
前言只要是接触过MySQL的程序员,那么或多或少都有听过redo log(重做日志)和binlog(归档日志)。今天就来分享一下这两个日志的用处和区别。简单来说,redo log是InnoDB特有的日志,如果使用的是其他存储引擎,就没有redo log,只有binlog。binlog是MySQL的Server层的日志,不管使用什么存储引擎,都会有binlog的存在。那么,为什么要有redo log和binlog呢?一个binlog不就可以全部解决了吗?接下来我们就来详细看一下redo log和binl原创 2021-02-15 14:07:53 · 2433 阅读 · 8 评论 -
MySQL的基础架构
前言临近春节,这段时间闲来无事又读了一些关于MySQL的文章和书籍,觉得受益良多。尤其是阿里巴巴丁奇的MySQL实战45讲,真的让我感觉到有质的提升。以前看书看博客都是优先看索引部分,优化部分。都是一些工作中常用的知识点。但现在我对MySQL的底层越来越好奇,所以从MySQL的基础架构开始学起,就有了这篇博客。MySQL逻辑结构大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能以及内置函数。原创 2021-02-10 11:19:14 · 2394 阅读 · 10 评论 -
解读阿里巴巴开发规范之MySQL
前言从7月份毕业开始算起,也是将近有5个月的工作经验了吧。在工作上,经历了一段时间的适应,现在接触到不同大神写出来的代码,发现各有优劣,于是就在思考一个问题,什么样的代码才是最正常最规范的呢?我的同事甩给我了一本《阿里巴巴Java开发手册》,从头到尾也算是过了一遍。今天趁着双休的假期,我就来讲一下这本书里面的MySQL规范制约吧~~~阿里巴巴开发规范之MySQL建表规约1、【强制】每张表必须设置一个主键ID,并且这个主键ID要自增(在满足需要的情况下尽量短),除非是分库分表理解:由于InnoDB存原创 2020-11-28 15:01:44 · 895 阅读 · 0 评论 -
聊聊MySQL的COUNT(*)的性能
前言基本职场上的程序员用来统计数据库表的行数都会使用count(*),count(1)或者count(主键),那么它们之间的区别和性能你又是否了解呢?其实程序员在开发的过程中,在一张大表上统计总行数是非常耗时的一个操作,那么我们应该用哪个方法统计会更快呢?接下来我们就来聊一聊MySQL中统计总行数的方法和性能。count(*),count(1),count(主键)哪个更快?1、建表并且插入1000万条数据进行实验测试:# 创建测试表CREATE TABLE `t6` ( `id` int(原创 2020-11-17 21:56:11 · 4691 阅读 · 17 评论 -
MySQL优化之超大分页查询
背景基本上只要是做后台开发,都会接触到分页这个需求或者功能吧。基本上大家都是会用MySQL的LIMIT来处理,而且我现在负责的项目也是这样写的。但是一旦数据量起来了,其实LIMIT的效率会极其的低,这一篇文章就来讲一下LIMIT子句优化的。LIMIT优化很多业务场景都需要用到分页这个功能,基本上都是用LIMIT来实现。建表并且插入200万条数据:# 新建一张t5表CREATE TABLE `t5` ( `id` int NOT NULL AUTO_INCREMENT, `name` va原创 2020-11-10 21:46:15 · 3480 阅读 · 14 评论 -
MySQL索引(三)索引不生效的情况
背景经历了前面两篇的介绍MySQL索引,相信大家也可以很清晰的认识到索引。这一节想分享一下在MySQL中给字段加了索引,但是查询的时候却不生效索引的情况,让更多的开发者可以少踩坑,接下来直接进入正文~~~为什么索引不生效在上一篇MySQL(二)如何设计索引我们有提到过,MySQL使用的是基于成本的优化器,但是由于查询优化技术是关系型数据库实现中的难点,因此总会有一些索引不生效的情况。接下来我们先建立一张表,并且插入模拟数据,来分析什么情况索引不生效。CREATE TABLE `t4` ( `i原创 2020-11-07 14:55:35 · 2217 阅读 · 0 评论 -
MySQL索引(二)如何设计索引
背景到这一篇文章,我就已经默认你阅读完了前面的MySQL文章。你可能已经知道了索引本质就是一种数据结构,来加快查询效率的。但是索引要怎么设计呢?这就是这一篇文章的目的。网上有很多博客会讲到最佳实践,比如单表索引数不能超过5个,联合索引中的字段不能超过5个等等。我只能说这些都是扯淡,任何实践都要放在特定的场景才能生效,所以接下来我们来聊聊索引设计吧。索引设计的误区1、单表索引数不超过5个索引本质上就是一种数据结构,然而我们可以把索引映射到现实生活中,就好比是《深入浅出MySQL》这本书前面的目录。难原创 2020-11-03 20:50:36 · 771 阅读 · 2 评论 -
MySQL索引(一)介绍索引
背景想象一下,你去图书馆找到一本你喜欢看的书,然后你想要快速知道这本书讲了什么内容,有哪些章节,都是通过书开头的“索引”部分,如果想要在一本书中找到某个特定主题,一般会先看书的“索引”,找到对应的页码。在MySQL中,存储引擎用类似的方法使用索引,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。接下来就来讲讲MySQL的索引吧。索引 索引是应用程序设计和开发的一个重要方面。如果索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响。要找到一个平衡点,这对于原创 2020-11-01 22:29:26 · 483 阅读 · 0 评论 -
MySQL怎么定位慢查询还有分析执行计划
背景大学期间就自学了MySQL数据库,懂得了怎么写简单的SQL查询数据,怎么多表查询。我还一直认为MySQL也不难呀,直到工作了才知道,原来我还是太年轻了~~~工作期间,写一个简单的CRUD就会碰到上千万的数据量,这个时候简单的select *就会花费大量的时间在查询上,这是不可容忍的。加上我公司的DBA会开启慢查询日志,还有连接接口报警,我才发现只会简单的MySQL是远远不够的,通过看书和学习总结,于是有了这篇博客。定位慢查询在我实际工作中,碰到某个功能或者接口需要等待很长的时间才响应的话,我们就原创 2020-10-27 21:16:47 · 582 阅读 · 0 评论 -
MySQL的隔离级别
前言从校园到企业工作也有一个多月的时间了,经常也是跟MySQL打交道,正好梳理一下MySQL的隔离级别。这个也是面试的时候经常问到的一个知识点,我就来分享一下我的理解。PS:MySQL事务都是指在InnoDB引擎下,MyISAM引擎不支持事务。事务的ACID特性事务都会具有这四种特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。简称为ACID特性。原子性。事务是数据库的逻辑工作单位,事务的各操作要么都完成,要么原创 2020-08-15 12:48:52 · 1119 阅读 · 0 评论