![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mysql
挲迦
这个作者很懒,什么都没留下…
展开
-
[MYSQL]浅析 JOIN
目录执行步骤NLJ(Index Nested-Loop Join)SNLJ(Simple Nested Loop join)小结执行步骤以如下sql为例,一般有两种join算法,先看下NLJ表中t1和t2的a字段都是索引字段select * from t1 left join t2 on (t1.a=t2.a);NLJ(Index Nested-Loop Join)正常步骤如下:1.从t1表 取出一行r12.查询出t2表中 满足a=r1.a的记录r2...原创 2021-01-03 11:37:15 · 124 阅读 · 0 评论 -
[MYSQL]常用的命令
查看执行中的事务select * from information_schema.innodb_trx;查看连接执行情况show processlist断开空闲连接kill connection id一个客户端处于 sleep 状态时,它的连接被服务端主动断开后,这个客户端并不会马上知道。直到客户端在发起下一个请求的时候,才会收到这样的报错“ERROR 2013 (HY000): Lost connection to MySQL server during quer..原创 2021-03-14 11:00:12 · 70 阅读 · 2 评论 -
[MYSQL]主备
主备一致master和slave有一个专门的长连接处理数据同步具体步骤1.slave设置change master,设置主库的连接信息 用户名密码 日志开始同步位置和偏移量2.slave上设置start slave,启动两个线程sql_thread和io_thread(负责于主库建立连接)3.master验证完用户名 密码,就把slave传来的日志位置和偏移量 在本地读取后送给slave4.slave把binlog日志接受 转化成中间日志(relay log)存在本地5.sql_原创 2020-12-20 20:07:04 · 103 阅读 · 1 评论 -
[MYSQL]幻读
概念同一个事务中,同一次查询,后面一次查询查到了第一次查询不存在的内容《RR下正常情况都是一样的视图,只有当前读才会出现幻读》innoDB解决幻读手段-间隙锁因为mysql一般只能加行锁只能锁住行,新插入的记录都是在间隙中生成的,所以行锁没发控制新纪录6条记录,7个间隙锁只有RR的隔离级别下才有间隙锁,rc是没有间隙锁的间隙锁之间不冲突举个例子,表中不存在记录c1=1的记录 session A 在10:10执行select * from t where c...原创 2020-12-13 20:02:46 · 85 阅读 · 0 评论 -
[MYSQL]简单查询也很慢?
1.被MDL写锁 block了,比如某个变更加字段 《metadata lock》查找造成阻塞的pid select blocking_pid from sys.schema_table_lock_waits2.等待flush查找被等待flush表的sql select * from information_schema.processlist where id=1;show processlist3.等待行锁(读锁等待写锁)查询谁持有写锁 select * f...原创 2020-12-11 22:43:30 · 169 阅读 · 0 评论 -
[MYSQL]完犊子了,索引不生效了
目录1.字段上加函数2.隐式类型转换两个前置知识点case3.join的时候 两张表的关联字段 字符集不同前置知识点case1.字段上加函数《查询条件的字段上不要套函数,索引会失效》这句话是不是听烂了,WHY?select count(*)from t where method(a) = 'xx';破坏了索引的有序,如果字段a是索引字段,a对应的索引树排序一定是按a来的2.隐式类型转换两个前置知识点字符串和数字类型对比,会把字符串转...原创 2020-12-11 21:33:55 · 117 阅读 · 0 评论 -
[MYSQL]浅析ORDER BY
目录全字段排序假设背景信息如下:查询排序步骤:rowId排序查询排序步骤小结一般执行计划中存在 using filesort就表示是要排序了全字段排序假设背景信息如下:表t (包含字段 id a b c d e)查询sql select cfrom t where a = 'x' order by b desc查询排序步骤:1.从引擎中取满足a=‘x’的所有记录(二级索引找到ID,再到对应的主键索引取捞数据)2.把记录中ab...原创 2020-12-11 19:55:53 · 374 阅读 · 0 评论 -
[MYSQL] COUNT(?)的学问
目录count(*)不带条件的查询innoDBmySaminnoDB为啥不学习mySamshow table statusinnoDB几种count的对比性能对比count(*)不带条件的查询innoDBserver从引擎里面load出所有的数据来累加统计。一般会找最小的那棵索引树来统计mySam把表的数据总量维护在一个磁盘中,直接返回 速度很快innoDB为啥不学习mySamMVCC每张表的数据量可能有多个,不同的事务里面查询都有多个结果。.原创 2020-12-10 21:43:39 · 66 阅读 · 0 评论 -
[MYSQL]online DDL
online DDL的流程具体的操作如下图,和离线的差异在于,多了一个文件记录写入请求 最后做合并三种重建表的方式从 MySQL 5.6 版本开始,alter table t engine = InnoDB(也就是 recreate)默认的就是上面的流程了; analyze table t 其实不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了 MDL 读锁; optimize table t 等于 recreate+analyze。...原创 2020-12-10 17:20:01 · 82 阅读 · 0 评论 -
[MYSQL]如何删除数据
目录表数据的存储delete内幕引发的小问题如何解决1.重建一张新表 把数据全部迁移过去2.alter table X表数据的存储表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的: OFF表示存在系统共享表空间 ON表示每张表存在一个独立的 XX.idb文件中 (drop table的时候 直接删除文件,如果是存在系统共享空间中,空间不会被回收)为了方便管理,一般建议该值设置成on,5.6.6原创 2020-12-10 16:33:23 · 177 阅读 · 0 评论 -
[MYSQl]锁[锁分类|加锁规则]
全局锁使用场景主要全库的逻辑备份实现方式1.flush tables with read lock这种方式全库都处于只读状态,比较危险2.mysqldump --single-transation带上rr的事务隔离级别最佳,不过这个只能在支持事务的引擎中使用(MyISAM就不行)表锁表锁语法lock tables read/write; 【lock tables t read; t1 write】注意点如上面的锁表语法 即便是开启锁表的事务 也只...原创 2020-12-18 22:05:38 · 227 阅读 · 0 评论 -
[MYSQL]事务的隔离
隔离级别说明&原理隔离级别 说明 原理 读未提交 可以读到别的事务没提交的数据 每次都建一个读视图 读已提交 只能读到别的事务已提交的数据 每次sql执行的时候,创建读视图 可重复读 事务启动时读到的数据和事务执行中的数据是一致的 事务启动的时候创建视图 串行 一个事务执行时 别的事务不能执行。 写会加写锁,读会加读锁 考读写锁互斥 具体隔离方式不同事务启动的时候,会有不同的r..原创 2020-11-18 12:56:53 · 76 阅读 · 0 评论 -
[MYSQL]redolog&binlog
概述这两个是mysql常用的恢复数据两个日志文件差异差异 redolog binlog 归属 innoDb引擎特有 server层-公用 文件写入方式 循环写入几个文件(会覆盖),通过writePos和checkPoint释放内存 持续写入 追加写入,可以理解成一直写 写入内容 物理:记录了数据页上做的修改 逻辑:有语义的,比如给某个字段值+5 关联(如何保持...原创 2020-11-17 10:57:21 · 136 阅读 · 0 评论 -
[MySql杂谈]如何解决幻读和一些加锁操作
问题update t set a = 'xx' where a = 'a1'; 如何加锁RC隔离级别下,对非索引字段更新,有个锁全表记录的过程,不符合条件的会及时释放行锁,不必等事务结束时释放;而直接用索引列更新,只会锁索引查找值和行。update产生的X锁在不释放的情况下,DELETE语句无法执行,但是UPDATE语句能更新不符合之前X锁的记录。 RR隔离级别下,为保证binlog记录顺序,非索引更新会锁住全表记录,且事务结束前不会对不符合条件记录有逐步释放的过程。DELETE和UPDATE原创 2020-09-02 11:54:14 · 367 阅读 · 0 评论 -
MySql事务隔离级别实现(MVCC)
概述本文会说明mysql InnoDB引擎如何实现RC和RR预备概念网上资料很多,我这里描述个大概。主要为下面“看图说话”的涉及到的基础知识做个铺垫mvcc多版本控制器,我们知道数据库每一条记录都是启用事务执行的操作。每个记录的值 背后一定有操作的事务ID。多次更新就会有多个。(事务开始的时候,会和InnoDb的事务系统申请,这个trxId是严格递增的)所以上面描述下来,心里有个图,每行记录都有一个 row list(每个row记录之前的值和trxId 可以做前滚和后滚)。.原创 2020-08-18 12:55:30 · 198 阅读 · 0 评论 -
[MYSQL]索引相关
先抛几个简单问题吧1.为啥不用二叉树,为啥不用红黑树,为啥不用B树2.为啥正常情况下用B+ 不用hash3.为啥聚类索引推荐使用 自增的数字作为主键简单说下第三个吧,uuid之类的对比起来性能比数字差,不是递增的,后面的字符串可能会在之前的里面会打破之前的节点 大幅度改变B+树的结构B+特点1.平衡性很好,深度不用很深 就能支持海量数据2.叶子节点是有序的 链...原创 2020-11-29 20:30:56 · 118 阅读 · 0 评论