MYSQL
从入门放弃
bohu83
微信:bohu83
展开
-
MySQL 最左原则的理解
先看下规则:一下是美团的技术建索引的几大原则1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可原创 2020-09-16 01:12:39 · 3780 阅读 · 0 评论 -
MySQL 唯一索引,并发插入导致死锁
一日志------------------------LATEST DETECTED DEADLOCK------------------------2020-07-27 16:28:53 0x7fc914aee700*** (1) TRANSACTION:TRANSACTION 484991260, ACTIVE 0 sec setting auto-inc lockmysql tables in use 2, locked 2LOCK WAIT 3 lock struct(s), h原创 2020-07-28 00:12:46 · 3234 阅读 · 2 评论 -
一次CMS日志
一 序 看监控有个节点FULL GC耗时8秒。看下日志:二.yonggc:新生代内存的垃圾收集事件称为 Young GC(又称 Minor GC),当 JVM 无法为新对象分配在新生代内存空间时总会触发 Young GC。Young GC 每次都会引起全线停顿(Stop-The-World),因为通常时间很短再0.1秒左右,可以不用去看,重点关注fullGC。贴一条日志:20...原创 2020-05-07 00:42:57 · 857 阅读 · 2 评论 -
MySQL45讲读书笔记 43讲要不要使用分区表
一序 本文属于极客时间MySQL45讲读书笔记系列。本篇老师主要是讲要不要使用分区表。开发同学要知道其中利弊:容易出现全表锁,适用于简单的大数据量业务场景,复杂的大数据量场景可以考虑分表分库水平扩展方案。二 分区表是什么?为了说明分区表的组织形式,我先创建一个表t:CREATE TABLE `t` ( `ftime` datetime NOT NULL, `c` int...原创 2020-05-05 22:47:21 · 318 阅读 · 0 评论 -
MySQL45讲读书笔记 42讲grant之后要跟着flushprivileges吗
一 序 本文属于极客时间MySQL45讲读书笔记系列。授权操作是开发同学了解,应该还是dba日常操作。在MySQL里面,grant语句是用来给用户赋权的。grant之后真的需要执行flush privileges吗?如果没有执行这个flush命令的话,赋权语句真的不能生效吗?接下来,我就先和你介绍一下grant语句和flush privileges语句分别做了什么事情,然后再一起来...原创 2020-05-05 21:16:45 · 207 阅读 · 0 评论 -
MySQL45讲读书笔记 41讲怎么最快地复制一张表
一序 本文属于极客时间MySQL45讲读书笔记系列。本文还是偏向dba,开发同学了解。怎么在两张表中拷贝数据。如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用insert … select 语句即可实现。当然,为了避免对源表加读锁,更稳妥的方案是先将数据写到外部文本文件,然后再写回目标表。这时,有两种常用的方法。接下来的内容,我会和你详细展开一下这两种方法。为了便于说明...原创 2020-05-05 20:54:03 · 288 阅读 · 0 评论 -
MySQL45讲读书笔记 40讲insert语句的锁为什么这么多
一 序 本文属于极客时间MySQL45讲读书笔记系列,本文老师主要讲了特殊的insert 情况。MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。还有些insert语句是属于“特殊情况”的,在执行过程中需要给其他资源加锁,或者无法在申请到自增id以后就立马释放自增锁。二 insert … select 语句我们先从昨天的问题说起吧。表t和t2的表结构、初始化...原创 2020-05-05 16:10:47 · 663 阅读 · 0 评论 -
MySQL45讲读书笔记 39讲自增主键为什么不是连续的
一 序 本文属于极客时间MySQL45讲读书笔记系列。本篇对于开发同学还是很有帮助的。我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑。之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。今天这篇文章,我们就来说说这个问题,看看什么情况下自增...原创 2020-05-03 23:46:17 · 303 阅读 · 0 评论 -
MySQL45讲读书笔记 38讲都说InnoDB好,那还要不要使用Memory引擎
一 序 本文属于极客时间MySQL45讲读书笔记系列。对于开发同学,本文属于了解。之前的问题:两个group by 语句都用了order by null,为什么使用内存临时表得到的语句结果里,0这个值在最后一行;而使用磁盘临时表得到的结果里,0这个值在第一行?二 内存表的数据组织结构为了便于分析,我来把这个问题简化一下,假设有以下的两张表t1 和 t2,其中表t1使用Memory...原创 2020-05-03 22:35:23 · 352 阅读 · 0 评论 -
MySQL45讲读书笔记 37讲什么时候会使用内部临时表
一 序 本文属于极客时间MySQL45讲读书笔记系列。本篇接着上篇老师接着介绍MySQL内部临时表的使用。今天这篇文章,我就先给你举两个需要用到内部临时表的例子,来看看内部临时表是怎么工作的。然后,我们再来分析,什么情况下会使用内部临时表。union 执行流程为了便于量化分析,我用下面的表t1来举例。create table t1(id int primary key, a...原创 2020-05-03 21:52:30 · 386 阅读 · 1 评论 -
MySQL45讲读书笔记 36讲为什么临时表可以重名
一 序 本文属于极客时间MySQL45讲读书笔记系列。本文老师主要讲临时表。今天我们就从这个问题说起:临时表有哪些特征,为什么它适合这个场景?这里,我需要先帮你厘清一个容易误解的问题:有的人可能会认为,临时表就是内存表。但是,这两个概念可是完全不同的。 内存表,指的是使用Memory引擎的表,建表语法是create table … engine=memory。这种表的数据都保...原创 2020-05-03 18:16:01 · 294 阅读 · 0 评论 -
MySQL45讲读书笔记 35讲join语句怎么优化
一 序 本文属于极客时间MySQL45讲读书笔记系列。对于开发同学,属于了解内容。就是你看了explain的结果后,知道extra里面的Using MRR,Using join buffer (Batched Key Access)是个啥意思。还对开发有借鉴意义。本篇老师接着上一篇,介绍对于join的算法Index Nested-Loop Join(NLJ)和Block Nested-...原创 2020-05-03 15:22:46 · 384 阅读 · 0 评论 -
MySQL45讲读书笔记 34讲到底可不可以使用join
一 序 本文属于极客时间MySQL45讲读书笔记系列,对于开发同学,本文属于干货。老师讲解了join的执行过程及使用注意事项。为了便于量化分析,我还是创建两个表t1和t2来和你说明。CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL...原创 2020-05-02 23:39:34 · 264 阅读 · 0 评论 -
MySQL45讲读书笔记 33讲我查这么多数据,会不会把数据库内存打爆
一 序本文属于极客时间MySQL45讲读书笔记系列。我经常会被问到这样一个问题:我的主机内存只有100G,现在要对一个200G的大表做全表扫描,会不会把数据库主机的内存用光了?全表扫描对server层的影响假设,我们现在要对一个200G的InnoDB表db1. t,执行一个全表扫描。当然,你要把扫描结果保存在客户端,会使用类似这样的命令:mysql -h$host -P$...原创 2020-05-01 22:07:07 · 395 阅读 · 0 评论 -
MySQL45讲读书笔记 32讲为什么还有kill不掉的语句
一 序 本文属于极客时间MySQL45讲读书笔记系列。开发同学属于了解系列,更偏向DBA。因为平时你没有admin权限去kill。在MySQL中有两个kill命令:一个是kill query +线程id,表示终止这个线程中正在执行的语句;一个是kill connection +线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句正在执行,也是要先停止正...原创 2020-05-01 15:00:59 · 323 阅读 · 0 评论 -
MySQL45讲读书笔记 31讲误删数据后除了跑路,还能怎么办
一 序 本文属于极客时间MySQL45讲读书笔记,本篇对于开发同学来说属于了解性质的。从删库到跑路这是dba的活。今天我们就来聊聊误删数据前后,我们可以做些什么,减少误删数据的风险,和由误删数据带来的损失。为了找到解决误删数据的更高效的方法,我们需要先对和MySQL相关的误删数据,做下分类: 使用delete语句误删数据行; 使用drop table或者truncat...原创 2020-05-01 00:06:43 · 305 阅读 · 0 评论 -
MySQL45讲读书笔记 30讲答疑文章(二):用动态的观点看加锁
一 序 本文属于极客时间MySQL45讲读书笔记系列,本文除了加锁外,老师还讲了死锁分析,干货满满。为了方便你理解,我们再一起复习一下加锁规则。这个规则中,包含了两个“原则”、两个“优化”和一个“bug”:原则1:加锁的基本单位是next-key lock。希望你还记得,next-key lock是前开后闭区间。 原则2:查找过程中访问到的对象才会加锁。 优化1:索引上的等值查...原创 2020-04-30 18:31:55 · 284 阅读 · 0 评论 -
MySQL45讲读书笔记 29讲如何判断一个数据库是不是出问题了
一 序 本文属于极客时间MySQL45讲读书笔记系列。本文属于了解内容。因为业务依赖数据库,会报警的。怎么判断一个主库出问题了?二 select 1判断实际上,select 1成功返回,只能说明这个库的进程还在,并不能说明主库没问题。现在,我们来看一下这个场景。set global innodb_thread_concurrency=3;CREATE TABLE `t`...原创 2020-04-28 16:18:09 · 264 阅读 · 0 评论 -
MySQL45讲读书笔记 28讲读写分离有哪些坑
一 序 本文属于极客时间MySQL45讲读书笔记系列。对于开发同学来说,这篇就是很接地气,干货满满。 先说下背景:对于常见的业务来说,往往是读多写少的情景,有些写多怎么优化的场景(如GPS坐标打点上报的那种)需要专题研究。所以提出了读写分离的方案,一主多从主用来写从用来分担读的压力。架构:图1 读写分离基本结构读写分离的主要目标就是分摊主库的压力。图1中的结构是客...原创 2020-04-28 00:04:21 · 302 阅读 · 1 评论 -
MySQL45讲读书笔记 27讲主库出问题了,从库怎么办
一 序 本文属于极客时间MySQL45讲读书笔记系列。前面三篇是介绍一主一备的MySQL主从结构,这篇更贴近实际应用,一主多从的模式。照例是如果是开发同学,我理解属于了解范围。主要是DBA更关注。还有使用阿里云这种云数据库,都是配置好的,也不是一点问题没有,主库异常切换的时候,也是秒级的异常。关注下业务的报错日志,看看是否要修复数据。本篇老师讲的就是一主多从的切换正确性。如图1所示,就是...原创 2020-04-25 16:35:46 · 249 阅读 · 0 评论 -
MySQL45讲读书笔记 26讲备库为什么会延迟好几个小时
一 序 本文属于极客时间MySQL45讲读书笔记系列。 本篇延续了前两篇的内容,还是讲主从复制的。对于开发同学而言,属于了解。但是里面的并发的思路值得学习。上一篇介绍的场景:不论是偶发性的查询压力,还是备份,对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来。如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别。而且对于一个压力持续比较...原创 2020-04-23 14:21:33 · 392 阅读 · 0 评论 -
MySQL45讲 读书笔记 25讲MySQL是怎么保证高可用的
一 序 本文属于极客时间MySQL45讲读书笔记系列。 跟上一篇一样,开发同学属于了解原理系列,如果公司已经使用了阿里云这种数据库了,那你那么就是选型的问题了。选主从还是双主的策略,背后的高可用阿里云都给你做好了。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有...原创 2020-04-22 14:09:09 · 313 阅读 · 0 评论 -
MySQL45讲读书笔记 24讲MySQL是怎么保证主备一致的
一 序 本文属于极客时间MySQL45讲读书笔记系列。MySQL的高可用架构,都直接依赖于binlog。 应该还是属于了解原理性质,知道MySQL同步的binlog的两种格式的优缺点。还是dba配置的。二 MySQL主备的基本原理如图1所示就是基本的主备切换流程。图 1 MySQL主备切换流程在状态1中,客户端的读写都直接访问节点A,而节点B是A的备库,只是将...原创 2020-04-22 00:16:53 · 397 阅读 · 0 评论 -
MySQL45讲 读书笔记 23讲MySQL是怎么保证数据不丢的
一 序 本文属于极客时间MySQL45讲读书笔记系列。 主题是数据的可靠性,之前介绍MySQL的WAL机制,只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。本文就是展开写入过程。二 binlog的写入机制 binlog的写入逻辑比较简单:事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把bi...原创 2020-04-19 21:32:30 · 298 阅读 · 0 评论 -
MySQL45讲 读书笔记 22讲MySQL有哪些“饮鸩止渴”提高性能的方法
一 序 本文属于极客时间MySQL45讲读书笔记系列。 本篇的更偏向dba同学,普通开发同学我觉得没有这么大权利去处理,尤其是在数据库遇到重大故障需要处理。可以理解为救急。二短连接风暴 正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重连。如果使用的是短连接,在业务高峰 期的时候,就可能出现连接数突然暴涨的情况。 MySQL建立连...原创 2020-04-10 10:35:21 · 325 阅读 · 1 评论 -
MySQL45讲 读书笔记 21讲为什么我只改一行的语句,锁这么多
一 序本文属于极客时间MySQL45讲读书笔记系列。本文老师先根据自己经验总结MySQL加锁规则,再结合例子来讲解。规则有以下两条前提说明: MySQL后面的版本可能会改变加锁策略,所以这个规则只限于截止到现在的最新版本,即5.x系列<=5.7.24,8.0系列 <=8.0.13。 如果大家在验证中有发现bad case的话,请提出来,我会再补充进这篇...原创 2020-04-06 16:24:38 · 355 阅读 · 0 评论 -
MySQL45讲 读书笔记系列 20讲幻读是什么,幻读有什么问题
一 序本文属于极客时间MySQL45讲读书笔记系列。 老师使用一个例子来讲解幻读的定义及数据库解决方案。建表和初始化语句如下:CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY...原创 2020-04-06 13:25:56 · 474 阅读 · 0 评论 -
MySQL45讲 读书笔记 19讲为什么我只查一行的语句,也执行这么慢
一 序 本文属于极客时间MySQL45讲读书笔记系列。本文也是讲业务实战的。有时候“查一行”,也会执行得特别慢。(如果MySQL数据库本身就有很大的压力,都会慢)为了便于描述,我还是构造一个表,基于这个表来说明今天的问题。这个表有两个字段id和c,并且我在里面插入了10万行记录。CREATE TABLE `t` ( `id` int(11) NOT NULL, `c`...原创 2020-04-06 00:11:32 · 219 阅读 · 0 评论 -
MySQL45讲 读书笔记 18讲为什么这些SQL语句逻辑相同,性能却差异巨大
一 序 本文属于极客时间MySQL45讲读书笔记系列。前面偏理论,本篇就是分享实际案例。案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。这个表的建表语句如下:CREATE TABLE `tradelo...原创 2020-04-05 00:09:39 · 243 阅读 · 0 评论 -
MySQL45讲 读书笔记 17讲如何正确地显示随机消息
一序本文属于极客时间MySQL45讲读书笔记。今天的主题为了加深对于排序的理解,是MySQL中的另外一种排序需求.业务场景:有个英语学习App首页有一个随机显示单词的功能,也就是根据每个用户的级别有一个单词表,然后这个用户每次访问首页的时候,都会随机滚动显示三个单词。他们发现随着单词表变大,选单词这个逻辑变得越来越慢,甚至影响到了首页的打开速度。现在,如果让你来设计这个SQL语句,...原创 2020-04-04 23:02:54 · 263 阅读 · 0 评论 -
MySQL45讲 读书笔记 16讲“orderby”是怎么工作的
一 序 本文属于极客时间MySQL45讲读书笔记系列。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` va...原创 2020-04-04 17:03:53 · 306 阅读 · 0 评论 -
MYSQL45讲 读书笔记 15讲答疑文章(一):日志和索引相关问题
一 序本文属于极客时间MySQL45讲读书笔记系列。 本文老师主要是用来答疑,关于日志与索引相关问题。二 日志相关问题 在第二篇 mysql45讲 2一条SQL更新语句是如何执行的讲到binlog(归档日志)和redo log(重做日志)配合崩溃恢复的时候,用的是反证法,说明了如果没有两阶段提交,会导致MySQL出现主备数据不一致等问题。在两阶段提交的不同瞬间,MySQ...原创 2020-04-03 10:45:00 · 415 阅读 · 0 评论 -
MySQL45讲 读书笔记 14讲count(*)这么慢,我该怎么办
一 序 本文属于极客时间MySQL45讲读书笔记系列。对于统计需求,select count(*) from t 是常见的场景,本篇的主题是count(*)语句到底是怎样实现的,以及MySQL为什么会这么实现二 count(*)的实现方式你首先要明确的是,在不同的MySQL引擎中,count(*)有不同的实现方式。MyISAM引擎把一个表的总行数存在了磁盘上,因此执行coun...原创 2020-04-03 00:29:02 · 195 阅读 · 0 评论 -
MySQL45讲 读书笔记 13讲为什么表数据删掉一半,表文件大小不变
一 序 本文属于极客时间MySQL45讲读书笔记系列。今天的主题是数据库表的空间回收,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。一个InnoDB表包含两部分,即:表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们今天主要讨论...原创 2020-04-02 14:33:39 · 248 阅读 · 0 评论 -
MySQL45讲 读书笔记 12讲为什么我的MySQL会“抖”一下
一 序 本文属于极客时间MySQL45讲读书笔记系列。一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。这就像是数据库“抖”了一下。二 你的SQL语句为什么变“慢”了 InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作。这个日志叫作redo log(重做日志),当内存数据页跟...原创 2020-04-01 23:52:09 · 750 阅读 · 0 评论 -
mysql45讲 读书笔记 11讲怎么给字符串字段加索引
一 序 本文属于极客时间MySQL45讲读书笔记系列。本文不太讲理论,更关注与业务上场景:如何在邮箱这样的字段上建立合理的索引。你现在维护一个支持邮箱登录的系统,用户表是这么定义的: create table SUser(ID bigint unsigned primary key,email varchar(64), ... )engine=innodb; 由于要...原创 2020-04-01 16:11:07 · 290 阅读 · 0 评论 -
MySQL45讲读书笔记 10讲MySQL为什么有时候会选错索引
一 序 本文属于极客时间MySQL45讲读书笔记系列。不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于MySQL选错了索引,而导致执行速度变得很慢?我们先建一个简单的表,表里有a、b两个字段,并分别建上索引:CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `...原创 2020-04-01 15:25:02 · 337 阅读 · 0 评论 -
MySQL45讲读书笔记 09讲普通索引和唯一索引,应该怎么选择
一序 本文属于极客时间mysql45讲读书笔记系列。老师一开始用一个例子来开始本篇的主题,普通索引跟唯一索引的选择。假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的SQL语句:select name from CUser where id_card = 'xx...原创 2020-04-01 00:43:20 · 259 阅读 · 0 评论 -
mysql45讲 读书笔记 08讲事务到底是隔离的还是不隔离
一 序本文属于极客时间mysql45讲读书笔记系列。老师从一个例子来说明事物的隔离,下面是一个只有两行的表的初始化语句。mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;insert into ...原创 2020-03-30 14:13:41 · 421 阅读 · 0 评论 -
Mysql45讲读书笔记 07讲行锁功过:怎么减少行锁对性能的影
一 序 本文属于极客时间的MySQL45讲读书笔记系列。MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。InnoDB是支持行锁的,以及如何通过减少锁冲突来提升业务并发度。从两阶段锁说起在下面的操作序列中,事务B的update语句执行时会是什么现象呢?假设字段id是表t的主键。实际上事务B的update语句...原创 2020-03-29 23:31:03 · 458 阅读 · 0 评论