随笔分类 - MySQL
摘要:MySQL 体系架构 - 连接池组件 1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 2、验证用户名和密码是否正确(数据库 MySQL 的 user 表中进行验证),如果错误返回错误通知 Access denied f
阅读全文
摘要:一、MySQL 体系架构和存储引擎 1、MySQL 被设计成一个单进程多线程架构的数据库,MySQL 数据库实例在系统上的表现就是一个进程。 2、MySQL 的体系架构,需要特别注意的是,存储引擎是基于表的,而不是数据库。 3、InnoDB 存储引擎是面向在线事务处理(OLTP)应用的首选,其特点是
阅读全文
摘要:一、事务分类 事务是访问并更新数据库中各种数据项的一个程序执行单元,事务会把数据库从一种一致状态转换为另一种一致状态,这就是事务的目的,也是事务模型区别与文件系统的重要特性之一。 InnoDB 存储引擎中的事务(READ REPEATABLE 隔离级别)完全符合 ACID 的特性。ACID 是以下
阅读全文
摘要:一、锁的类型 InnoDB 存储引擎 lock 的对象是事务,用来锁定的是数据库中的对象,如表、页、行,并且一般 lock 的对象仅在事务 commit 或 rollback 后进行释放(不同事务隔离级别释放的时间可能不同)。 InnoDB 存储引擎实现了如下两种标准的行级锁,其中,X 锁与任何的锁
阅读全文
摘要:一、快照读与当前读 快照读(SnapShot Read) 是一种一致性不加锁的读,是 InnoDB 并发如此之高的核心原因之一。 在 READ COMMITTED 事务隔离级别下,一致性不加锁的读是指,总是读取被锁定行的最新一份快照数据,因此其它事务修改了该行数据,该事务也能读取到,这也贴合了 RC
阅读全文
摘要:01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null。除了 left join 以外,还有 inner join、outer join、right join,这些不同的
阅读全文
摘要:一、为什么需要全文索引? 通过 前面的文章 我们了解到 B+ 树索引具有"最左前缀匹配"的特性,因此,对于以下查询 B+ 树索引能很好的适配。 SELECT * FROM blog WHERE content like 'xxx%' 但是 B+ 树索引对于 '%xxx%' 式的匹配却显得无能为力,而
阅读全文
摘要:一、B+树索引概述 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响(需维护索引的结构和数据);而索引太少,对查询性能又会产生影响。 二叉树,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值。 平衡二叉树(AVL树),任何节点的两个子树的高度最大差为 1。平
阅读全文
摘要:引入 MRR,全称「Multi-Range Read Optimization」。 简单说:MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能。 至于: 为什么要把随机读转化为顺序读? 怎么转化的? 为什么顺序读就能提升读取性能? 执行一个范围查询: mysql > exp
阅读全文
摘要:MySQL 数据库在 5.1 版本时添加了对分区(partitioning)的支持。分区的过程是将一个表或索引分解成多个更小、更可管理的部分。就访问数据库的应用而言,从逻辑上来讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个物理分区组成。 MySQL 分区功能并不是在存储引擎层完成的,
阅读全文
摘要:一、InnoDB 体系架构 InnoDB 存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构。 缓存磁盘上的数据,方便快速的读取,同时对磁盘文件的数据修改之前在这里进行缓存。 重做日志(redo log)缓冲。 后台线程的主要作
阅读全文
摘要:Clustered and Secondary Indexes(聚集索引和二级索引) Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Ty
阅读全文
摘要:一、多个事务并发时可能遇到的问题 Lost Update 更新丢失 a. 第一类更新丢失,回滚覆盖:撤消一个事务时,在该事务内的写操作要回滚,把其它已提交的事务写入的数据覆盖了。 b. 第二类更新丢失,提交覆盖:提交一个事务时,写操作依赖于事务内读到的数据,读发生在其他事务提交前,写发生在其他事务提
阅读全文
摘要:一、背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间。即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的。在我们项目中由于不清理数据,一个表占的空间竟然达到了4G之多。想想有多可怕... 这里介绍的是用MySQL 建立一个定时器Even
阅读全文
摘要:一、数据库优化 一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小。 选择合适的引擎:Mysql提供了很多种引擎,我们用的最多的是myisam,innodb,memory这三类。其中
阅读全文
摘要:一·、前言 这篇博文内容非原创,是我们公司的架构师给我们做技术培训的时候讲的内容,我稍微整理了下,借花献佛。这篇博文只是做一个大概的科普介绍,毕竟SQL优化的知识太大了,几乎可以用一本书来介绍。另外,博主对SQL优化也是刚刚接触,也有很多不了解的地方,说的不对的地方,还请大家指正,共勉! 二、ORA
阅读全文
摘要:1、行列转换 oracle 中的行列转换是通过 decode 函数实现的: 举例:查询emp表中的每个部门的人数? 做个对比 2、递归查询的优化 解释:CONNECT_BY_ISLEAF 判断该行记录是否为叶子节点,如果是返回1,否则返回0 START WITH FATHER_ID = 0 规定哪一
阅读全文