MySQL8新特性底层原理
MySQL8新特性底层原理 降序索引 什么是降序索引 MySQL 8.0开始真正支持降序索引 (descendingindex) 。只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。另外MySQL8.0不再对GROUP BY操作进行隐式排序。 在MySQL中创建一个t2表 create table t2(c1 int,c2 int,index idx1(c1 asc,...
MySQL8新特性底层原理 降序索引 什么是降序索引 MySQL 8.0开始真正支持降序索引 (descendingindex) 。只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。另外MySQL8.0不再对GROUP BY操作进行隐式排序。 在MySQL中创建一个t2表 create table t2(c1 int,c2 int,index idx1(c1 asc,...
1.事务底层与高可用原理 事务的基础知识 MySQL的事务分为显式事务和隐式事务 默认的事务是隐式事务 显式事务由我们自己控制事务的开启,提交,回滚等操作 show variables like 'autocommit'; 事务基本语法 事务开始 1、begin 2、START TRANSACTION(推荐) 3、begin...
1.InnoDB引擎底层解析 InnoDB的三大特性: 双写机制 Buffer Pool 自适应Hash索引 自适应Hash索引在之前的索引课中已经讲到了,这节课不再做陈述。同时我们对InnoDB不能只是光看亮点,还是要体系化的去学习。 InnoDB的内存结构和磁盘存储结构图总结如下: 看这种结构图大家肯定是比较晕的,所以我们用需求来驱动进行讲解。 1、Inn...
1.MySQL的执行原理-2 1.1.MySQL的查询成本 1.1.1.什么是成本 MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊的,其实在MySQL中一条查询语句的执行成本是由下边这两个方面组成的: I/O成本 我们的表经常使用的MyISAM、InnoDB存储引擎都是将数据和索引都存储...
1. MySQL的执行原理 1.1.单表访问之索引合并 我们前边说过MySQL在一般情况下执行一个查询时最多只会用到单个二级索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二级索引,MySQL中这种使用到多个索引来完成一次查询的执行方法称之为:索引合并/index merge,具体的索引合并算法有下边三种。 1.1.1.Intersection合并 Interse...
1.MySQL中的系统库 1.1.系统库简介 MySQL有几个系统数据库,这几个数据库包含了MySQL服务器运行过程中所需的一些信息以及一些运行状态信息,我们现在稍微了解一下。 performance_schema 这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,...
1. MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle Drizzle是真正的MySQL分支,而且是完全开源的产品,而非...
1.7. MySQL8.0新特性 对于 MySQL 5.7 版本,其将于 2023年 10月31日 停止支持。后续官方将不再进行后续的代码维护。 MySQL 8.0 全内存访问可以轻易跑到 200W QPS,I/O 极端高负载场景跑到 16W QPS,除此之外MySQL 8还新增了很多功能,那么我们来一起看一下。 1.7.1. 账户与安全 1.7.1.1. 用户创建和授权 到了My...
1.6. MySQL中的锁 InnoDB中锁非常多,总的来说,可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习。 1.6.1.解决并发事务问题 我们已经知道事务并发执行时可能带来的各种问题,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据,尤其是一个事务进行读取操作,另一个同时进行改动操作的情况...
1.5. MVCC 全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。 同一行数据平时发生读写请求时,会上锁阻塞住。但MVCC用更好的方式去处理读—写请求,做到在发生读—写请求冲突时不用加锁。 这个读是指的快照读,而不是当前读,当前读是一种加锁操作,是悲观锁。 那它到底是怎么做到读—写不用加锁的,快照读和当前读是指什么...