链表
链表定义 public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNod
MySQL 事务
数据库事务 事务是一个抽象的概念,它对应着一个或多个数据库操作,这些操作要么全部成功,要么全部失败。事务有四大特性,即 ACID: 事务特性
InnoDB 的 Buffer Pool
Buffer Pool 是什么 学过操作系统的同学,应该都知道局部性原理,分为时间局部性和空间局部性。时间局部性指的是访问过一次的位置可能在不远的将来被多次访问。空间局部性指的是一个位置被访问,可能不久后它附近的位置也会被访问。 Buffer Pool 正是一个利用了局部性原理的优化设计,当访问某个
MySQL 执行计划
通过 Explain 查看执行计划 一条查询语句在经过 MySQL 查询优化器的基于成本和规则的优化会后会生成一个执行计划,这个执行计划展示了 MySQL 会使用何种方式来执行查询,通过 MySQL 提供的 EXPLAIN 语法可以查看执行计划。 执行计划的生成是 MySQL server 层中的功
查找表
349. 两个数组的交集 class Solution { public int[] intersection(int[] nums1, int[] nums2) { int[] more = nums1.length > nums2.length ? nums1 : num
InnoDB 如何计算统计数据
统计数据的存储 InnoDB 统计数据可以存储在磁盘上,也可以只存储在内存中。MySQL 提供了一个系统变量 innodb_stats_persistent 来控制使用哪种方式来存储统计数据,MySQL 5.7 默认为 ON,表示统计数据默认存储在磁盘上。 由于 InnoDB 以表为单位来收集统计数
MySQL 基于成本的优化
查询成本 我们知道对于同一个 SQL,可以按照不同的方案去执行,MySQL 会选择执行成本最低的那种方案。 一条语句的查询成本由下面两个方面组成: IO 成本:InnoDB 把表存储在磁盘上,查询的时候,需要把数据加载到内存中,这个将数据从磁盘加载到内存的过程花费的时间就是 IO 成本。 CPU 成
MySQL 表连接原理
表连接介绍 表连接也就是我们常说的 JOIN,连接的结果是两张表中符合条件的记录的笛卡尔积,即一张表中符合条件的每一条记录和另一张中符合条件的每一条记录相互匹配的组合。假设有两张表,分别是表 A 和表 B,其中分别有 3 条和 4 条符合连接条件的记录,则这两张表连接的笛卡尔积如下: 对应的 SQL
MySQL 单表访问方法
单表访问方法 先创建一张表: CREATE TABLE `employee` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(100), `employee_id` INT, `english_name` VARCHAR(100)
InnoDB 表空间
独立表空间结构 区(extent) 通常,表空间中的页会非常非常多,为了更好地管理这些页,InnoDB 引入了区(extent)的概念。规定一个区由连续的 64 个页组成,如果默认使用 16 KB 大小的页,那么一个区大小为 1 MB。此外,每 256 个区还会划分成一个组,大概如图所示: 从图中我