随笔分类 -  数据库

摘要:join语句的两种算法,分别是:NLJ和BNL 测试数据: create table t1(id int primary key, a int, b int, index(a)); create table t2 like t1; drop procedure idata; delimiter ;; 阅读全文
posted @ 2019-11-11 23:53 进击的李同学 阅读(1104) 评论(1) 推荐(1)
摘要:前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NUL 阅读全文
posted @ 2019-11-11 23:11 进击的李同学 阅读(807) 评论(2) 推荐(0)
摘要:前言 在一个MySQL主备关系中,每个备库接受主库的binlog并执行。 正常情况下,只要主库执行更新生成所有的binlog,都可以传到备库并被正常的执行,这样备库就能够达到跟主库一样的状态,这就是最终一致性。 但是MySQL提供的高可用能力,只有最终一致性是不够的,因为我们的备份可能会遇到主备延迟 阅读全文
posted @ 2019-11-11 22:18 进击的李同学 阅读(330) 评论(0) 推荐(0)
摘要:注:加锁规则指的是next-key lock,如果还不了解next-key lock,请阅读上一篇博客 加锁规则可以概括为:两个原则、两个优化和一个bug: 原则1:加锁的基本单位是next-key lock,前开后闭 原则2:查找过程中访问到的对象才会加锁 优化1:索引上的等值查询,给唯一索引加锁 阅读全文
posted @ 2019-11-11 21:39 进击的李同学 阅读(1893) 评论(0) 推荐(0)
摘要:首先我们创建一个表,并插入测试数据: CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`) ) E 阅读全文
posted @ 2019-11-11 15:43 进击的李同学 阅读(329) 评论(0) 推荐(0)
摘要:有些情况,只查一行数据,执行的也会特别慢,接下来我们就梳理一下,会出现这里现象的场景。 数据库压力 如果MySQL数据库本身就有很大的压力,导致CPU占用率很高,IO利用率很高,那么即使是执行一条SQL语句,也会执行的很慢。 锁 如果这条SQL语句被锁住,他就会执行的很慢。而MySQL中的锁,又分为 阅读全文
posted @ 2019-11-11 13:13 进击的李同学 阅读(301) 评论(0) 推荐(1)
摘要:接上文 在MySQL中,有一些语句即使逻辑相同,执行起来的性能差异确实极大的。 还记得我们上文中的结论吗:如果想使用索引树搜索功能,就不能使用数据库函数来处理索引字段值,而是在不改变索引字段值的同时,自己通过SQL语句来实现逻辑。 而本文中,我们将基于上述结论进行分析,为什么隐式替换,不能使用索引树 阅读全文
posted @ 2019-11-11 12:51 进击的李同学 阅读(604) 评论(0) 推荐(0)
摘要:在MySQL中,有一些语句即使逻辑相同,执行起来的性能差异确实极大的。 先抛出一个结论:如果想使用索引树搜索功能,就不能使用数据库函数来处理索引字段值,而是在不改变索引字段值的同时,自己通过SQL语句来实现逻辑 条件字段函数操作 假设我们现在维护了一张系统交易表: mysql> CREATE TAB 阅读全文
posted @ 2019-11-11 00:23 进击的李同学 阅读(3059) 评论(0) 推荐(0)
摘要:MySQL中的锁,分为全局锁、表级锁、行锁 全局锁 全局锁的意思就是,对整个数据库实例加锁,它的命令是FTWRL Flash tables with read lock 这个命令的语义是,使整个库处于一种只读的状态,使用这个命令后,以下语句会被阻塞:数据的更新、数据结构的定义、更新类事务的提交。全局 阅读全文
posted @ 2019-11-10 21:52 进击的李同学 阅读(572) 评论(0) 推荐(0)
摘要:MySQL中有两类非常重要的日志,一类是redo log(重做日志),一类是bin log(归档日志) redo log 重做日志利用的,是MySQL中,常见的WAL技术,WAL技术的全程是:Write-Ahead-Logging,它的关键点就是先写日志,再写磁盘。在我们的MySQL中,当有一条记录 阅读全文
posted @ 2019-11-10 21:49 进击的李同学 阅读(536) 评论(0) 推荐(0)
摘要:前言 我们在学习一种技术的时候,首先要鸟瞰其全貌,千万不要一开始就陷入到细节中去,这样有助于我们站在高维度其理解问题 —— 丁奇。 学习MySQL也是一样,所以我们可以从一条查询语句的执行开始看起。 select * from t where id = 1; 通常情况下,我们在使用MySQL的时候, 阅读全文
posted @ 2019-11-10 21:46 进击的李同学 阅读(478) 评论(0) 推荐(0)