MySQL
文章平均质量分 73
素人岳
这个作者很懒,什么都没留下…
展开
-
【MySQL索引】MySQL索引失效的几种场景详解
MySQL索引失效的几种场景详解;工作常用,面试必问类型,在这里总结下,头两次面试没问,这次必问,背不背随你😂;原创 2022-08-15 23:26:30 · 798 阅读 · 0 评论 -
【MySQL】 MySQL间隙锁理解
间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制,间隙锁只有在隔离级别为可重复读的情况下才会生效;锁加载两个索引之间(空闲空间),也可以是第一个索引之前,也有可能是最后一个索引之后;事务 A 按照一定条件进行数据读取, 期间事务 B 插入了相同搜索条件的新数据,事务 A 再次按照原先条件进行读取时,发现了事务 B 新插入的数据,这种现象称为幻读;...原创 2022-08-12 22:09:58 · 973 阅读 · 0 评论 -
个人MySQL快照读和当前读理解
- 在`MySQL`中读取数据有两种方式,一种是当前读,另一种是快照读;- 顾名思义,当前读就是读的是当前时刻已提交的数据,快照读就是读的是快照生成时候的数据;MySQL快照读场景和当前读场景;MySQL快照读有什么好处;......原创 2022-07-08 23:08:40 · 1030 阅读 · 0 评论 -
一文读懂MySQL的MVCC多版本并发控制
其中幻读和不可重复读有些类似,区别:只能在可重复读和读已提交两个隔离级别下工作,和其他隔离级别是不兼容的,因为读未提交总是读取最新的数据,而可串行化对所有数据都会加锁。比单纯的加锁更高效,只在和两个隔离级别下工作早期数据库不论读取还是写入,都用锁来实现。但是锁会带来性能的问题,MVCC就是MySQL对于读的一种优化方案;在使用MVCC中,对于任何修改的操作,都不会直接覆盖掉原数据,而是产生一个新老版本共存的状态,根据版本号去区分,使得读取时可以完全不加锁,这样读取数据时,MVCC根据版本号就会判断出应该读取原创 2022-07-06 23:52:17 · 372 阅读 · 1 评论 -
Mysql索引知识点
都是工作中常用的知识点,列了一个大纲,如果有理解错误的地方,欢迎斧正:首先说一下MySQL常用的两种引擎以及特点:InnoDB引擎:底层使用B+Tree结构,如果是主键索引,叶子节点存储整行数据,如非主键索引,叶子节点存储主键id,具体如图:主键索引B+Tree存储结构:非主键索引B+Tree存储结构:看这两张截图,再去理解一下上面的话就容易的多了。MyISAM引擎:底层采用的是B-Tree结构,大体上和B+Tree结构差不多,唯一的区别就是不管是主键索引还是非主键索引,叶.原创 2022-06-27 00:35:47 · 111 阅读 · 0 评论 -
Mysql常见优化方法
都是工作中常用的,不定期更新exsits替换in优化,当A表数据小于B表数据时,可使用exsits替换in,反之则使用in。select * from A where id in (select id from B)使用count()字段时,count(name)比count(id)速度要快,(假设name为普通索引,id为主键索引),因为普通索引叶子节点存储数据量较小。count(1)会比count(name)快一点count(1) > count(name) > count(*原创 2020-08-04 01:47:25 · 182 阅读 · 0 评论 -
Mysql表关联的两种算法
Mysql表关联常见的有两种算法:嵌套循环连接 Nested-Loop Join(NLJ) 算法基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法嵌套循环连接 Nested-Loop Join(NLJ) 算法:适用于关联的两个字段都为索引的情况下,首先会查询出全部驱动表的关联字段,然后一一去和被驱动表关联,直至全部关联完成。基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法:如果关联字段不是索引或者有一个字段不是索引,MySQL则会原创 2020-08-04 00:32:13 · 670 阅读 · 0 评论 -
Mysql事务的四大特性、四种隔离级别与Spring事务传播机制
什么是事务:可以把事务看成一个最小的执行单元,事务内的语句,要么全部执行成功,要么全部回滚不执行。通俗来讲,就是被事务注解标注的代码块,要么全部执行成功,如果其中一处出现异常,则前面所有执行成功的操作全部回滚不执行。事务的四大特性(ACID):原子性(atomicity):事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行。一致性(consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。隔离性(isolation):同一时间,只允许一个事务请求同一组数原创 2020-08-03 11:18:35 · 431 阅读 · 1 评论 -
Mysql分页优化方法
下面是正常的分页代码:select * from shop limit 50000,10弊端:看似只查询了10条,其实是查询了50010,然后把前面50000条丢弃了,只显示这5条而已,如果数据量比较大的话,翻页会很卡的。优化方式一:select * from shop where id > 50000 limit 10前提是表的主键id是自增的,如果中间有数据删除的话,就会失效,所以不太推荐优化方式二:先查询出分页的主键(覆盖索引):select id from shop wh原创 2020-07-29 16:39:53 · 342 阅读 · 0 评论 -
Mysql中单路排序和双路排序详解
索引排序和文件排序介绍:当对sql进行order by排序的时候,需要尽可能的使用索引排序,如果无法使用索引排序的话,mysql就会使用文件排序。文件排序出现的几种情况:order by 字段不是索引字段order by 字段是索引字段,但是 select 中没有使用覆盖索引,如:select * from staffs order by age asc;order by 中同时存在 ASC 升序排序和 DESC 降序排序,如:select a, b from staffs order by a原创 2020-07-29 02:46:36 · 4259 阅读 · 10 评论 -
Mysql trace命令介绍
trace作用:对SQL的跟踪,可以知道SQL是如何执行的,比EXPLAIN还要强大。注意点:开启trace工具会影响mysql性能,所以只能临时分析sql使用,用 完之后立即关闭。开启trace:set session optimizer_trace="enabled=on",end_markers_in_json=on; #开启set session optimizer_trace="enabled=off"; #关闭查看根据记录:# 这里是需要执行的sqlSELECT *原创 2020-07-29 00:45:17 · 1077 阅读 · 0 评论 -
mysql覆盖索引入门介绍
要深刻理解覆盖索引,要弄清楚innoDB引擎B+Tree结构,具体结构如下:那么这两个结构的区别在哪里呢,区别就在叶子节点中,主键索引存储的是整行的数据,而非主键索引叶子节点存储的是主键id,可以看下面的sql:SELECT age FROM student WHERE name = '小王';执行上面的sql流程为:在name索引树上找到名称为小李的节点 id为03从id索引树上找到id为03的节点 获取所有数据从数据中获取字段命为age的值返回 12上面的操作成为回表:在流程中从原创 2020-07-28 23:46:59 · 139 阅读 · 0 评论 -
Mysql提示错误:Reading table information for completion of table and column names
切换数据库错误信息:Reading table information for completion of table and column names.原因:大概的意思是当库表很多的时候就会出现加载慢的问题,为了避免这种情况需要在连接时屏蔽预读表信息。解决办法:在连接连接数据库时使用以下命令连接,然后再进行切换数据库就可以了:mysql -uroot -p -A参考:https://dba.stackexchange.com/questions/62102/mysql-database-原创 2020-07-27 22:18:14 · 5072 阅读 · 0 评论 -
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements问题解决
操作数据库时提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements问题。原因是因为Mysql增加了密码强度验证插件:validate_password,去网上查原因都是是因为设置的密码太简单了,才会出现这个问题,但是我设置的挺复杂的,莫名其妙(`・ω・´)解决办法:进入到mysql,依次输入一下命令即可解决:mysql> set global validate_password_p原创 2020-07-27 21:56:29 · 1450 阅读 · 0 评论 -
Mysql update时执行select操作
需要使用 INNER JOIN 操作,具体代码如下:update student sINNER JOIN (SELECT CONCAT( s1.name2, s1.name3 ) AS n, s1.id FROM student s1) aa on s.id = aa.idset s.name1 = aa.nwhere s.id = 1意思是将student表的name1字段设置为name2 + name3的拼接字段...原创 2020-06-08 14:42:06 · 1610 阅读 · 2 评论