随笔分类 - 数据库理论
摘要:mysql与pg的主键说明 mysql 插入顺序与插入随机测试案例 B+Tree 原理 id顺序的方式插入 id随机的方式插入 Postgresql 堆组织表 CTID Pg的元组及索引原理 Pg与mysql与oracel 问题 mysql 插入顺序与插入随机测试案例 创建了两张表 一张表是按顺序来
阅读全文
摘要:背景 一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash、RTree、FullText。本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树、平衡二叉树、B-Tree,相关的知识网上很多,为了方便自己更快、清楚的了解,文本聚合一些内容以及个人的一些理解。 说明 二叉
阅读全文
摘要:一 前言 工欲善其事必先利其器,前面分析了很多死锁案例,并没有详细的介绍如何通过死锁日志来诊断死锁的成因。本文将介绍如何读懂死锁日志,尽可能的获取信息来辅助我们解决死锁问题。二 日志分析2.1 场景 为了更好的学习死锁日志,我们需要提前了解死锁场景MySQL 5.6 事务隔离级别为RR CREATE
阅读全文
摘要:一、Innodb Buffer Pool 简介Buffer Pool 是Innodb 内存中的的一块占比较大的区域,用来缓存表和索引数据。众所周知,从内存访问会比从磁盘访问快很多。为了提高数据的读取速度,Buffer Pool 会通过三种Page 和链表来管理这些经常访问的数据,保证热数据不被置换出
阅读全文
摘要:对于主从库主机时间不一致的情况,在I/O线程第一次启动时,会计算主从之间的主机时间差,在后续计算复制延迟时,会把这个时间差减掉,这样就可以保证正确获取到复制延迟时间,但是该时间差只在I/O线程启动时才会进行计算,所以,当I/O线程启动之后修改了主从库的主机时间,则根据计算公式,会导致复制延迟时间不可
阅读全文
摘要:向量化执行引擎 在三种常见的数据库查询引擎执行模型中我们讲到了向量化执行引擎本质上是一种批处理模型。批处理思想在计算机的世界里经常闪闪发光。高并发场景中,可以把大量的请求合并,改为调用批量接口;大数据下读取分布式文件系统时,如果要读取大量的小文件,可以将这些小文件打成tar包,或者批量一次打开100
阅读全文
摘要:CBO代价解析在过去数据库主要使用基于规则的优化器(RBO),基于规则将SQL解析生成的关系表达式进行等价交换,形成更优的方案,例如,有一个多表查询SQL select a.c_id,sum(c.price) from a,b,c where a.c_id=c.c_id and c.o_id=b.o
阅读全文
摘要:无所不能的程序猿吐出一句魔法[SQL],刹那间,IO 犹如千军万马奔流不息,内存 似鲸吸牛饮,海纳百川,CPU 更是狂暴着以360%负荷高速运转,瞬间,一个美妙的身影出现了……一条SQL的背后,数据库到底做了什么,本文将深入浅出的聊一下SQL的解析和执行过程。 一、SQL简介SQL是上世纪70年代,
阅读全文
摘要:SQL查询的执行过程,就像工厂的加工流水线,层层递进,最终得到想要的结果,而SQL算子就好比其中的一道道工序。本篇简要介绍一下SQL执行计划中,一些常见算子的含义和逻辑。 • indexscan 索引扫描当数据表中创建了索引,并使用索引字段进行查询时,会进行索引扫描。 • tablescan 顺序表
阅读全文
摘要:一、迭代模型/火山模型(Iterator Model)又称 Volcano Model 或者 Pipeline Model。 Iterator Model该计算模型将关系代数中每一种操作抽象为一个 Operator,将整个 SQL 构建成一个 Operator 树,查询树自顶向下的调用next()接
阅读全文
摘要:mysql支持的join算法• Nested Loop Join• Index Nested-Loop Join• Block Nested-Loop Join Index Nested-Loop Join 和 Block Nested-Loop Join是在Nested-Loop Join基础上做
阅读全文
摘要:在网络上看了几篇关于幻读的文章,总有些不对劲的地方,要么是解释过于官方看不懂,要么压根儿就是错的,于是我找到了著名论文 A Critique of ANSI SQL Isolation Levels ,对幻读问题做了归纳和总结,希望能帮助大家真正理解幻读,大纲如下: 什么是幻读 幻读最早由 ANSI
阅读全文