专注写bug
你知道的越多,你不知道的也越多!
展开
-
MySQL——Innodb引擎SQL执行的BufferPool缓存机制
文章目录前言内部组件结构和sql执行过程回顾Innodb引擎SQL执行的BufferPool缓存机制前言在之前博客内部组件结构和sql执行过程中,大致说明了MySQL中的各种组件,以及每种组件的各个作用是什么。以及在关于MySQL中的bin-log博客中,重点说明了bun-log的配置、实现和数据恢复等操作。但,一条sql,在MySQL中到底是如何执行的,相信很多人依旧会有点懵懂。本篇博客重点说明一条sql在MySQL的具体执行情况。内部组件结构和sql执行过程回顾之前博客中,大致说明了MyS原创 2021-07-22 19:59:50 · 276 阅读 · 0 评论 -
MySQL——MVCC机制详解(undo、read view)
文章目录前言MVCC介绍undo日志版本链(回滚日志) 与 read view机制前言在之前博客中,通过针对各项事务隔离级别进行测试操作,发现MVCC机制对某些隔离级别,做了很好的优化操作。什么是MVCC机制,本篇博客对其做一定的分析解释。MVCC介绍在数据库中,之前就说到了事务ACID属性,先对其做一个小的回顾。事务通常具备以下几点特征:原子性(Atomicity):事务是一个原子操作单元,这一组sql对数据的操作,要么都成功,要么都失败【问:】说到原子性,首先得知道什么是原子?原原创 2021-07-20 21:39:46 · 328 阅读 · 4 评论 -
MySQL——死锁的产生和优化
文章目录前言死锁的产生锁的优化建议前言上一篇博客间隙锁、临键锁和行锁分析中,重点说明了间隙锁、临键锁的产生,以及其产生的情况。同时也分析了可重复读下使用间隙锁解决幻读问题的原理等,以及说明了行锁在条件无索引时升级为表锁和如何分析数据库锁信息等知识点。本篇博客重点说明死锁的产生和优化问题。死锁的产生本次使用排它锁进行死锁测试。【前提:】保证事务隔离级别为 repeatable-read。依旧是开启两个窗口,进行测试。测试操作步骤如下所示:步骤1:窗口1 和 窗口2 开启事务。步骤原创 2021-07-19 16:35:21 · 133 阅读 · 1 评论 -
MySQL——间隙锁、临键锁和行锁分析
MySQL间隙锁、临键锁和死锁分析前言事务隔离级别回顾间隙锁(Gap Lock)前言在上一篇博客(事务隔离级别案例分析)中,重点说明了几种事务隔离级别下,针对出现脏读、幻读和不可重复读问题的产生过程和结果。同时也在串行化 隔离级别中,说到了间隙锁(针对范围数据加锁)的产生和现象。本篇博客重点说明间隙锁和临键锁的详细问题,以及说明死锁问题出现的情况和现象分析。事务隔离级别回顾事务隔离级别下,出现脏读、幻读和不可重复读问题的可能性,做一个大致回顾。隔离级别脏读(Dirty Reads)原创 2021-07-19 16:03:22 · 536 阅读 · 2 评论 -
MySQL——事务隔离级别案例分析
文章目录前言本篇概述新表创建和数据追加事务级别回顾MySQL默认事务隔离级别读未提交前言前面博客中,分别说明了事务隔离机制和简单的锁机制。本篇博客主要讲解说明行锁与事务隔离级别的案例分析。前两篇博客链接如下:MySQL——事务隔离级别MySQL——锁机制以及表锁和行锁测试本篇概述以新建一张InnoDB类型的数据库表,模拟其他隔离级别下行锁的表现形式。新表创建和数据追加创建InnoDB类型的数据表,并添加相关测试数据:CREATE TABLE `account` ( `id` int原创 2021-07-15 00:08:01 · 174 阅读 · 0 评论 -
MySQL——锁机制以及表锁和行锁测试
文章目录前言何为锁数据库锁的分类前言上一篇文章:MySQL——事务隔离级别中说到:多个事务可能会并发的对某一个相同的数据进行增删改查操作,可能会出现脏读、脏写、幻读、不可重复读等问题。为了解决数据库多事务的并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制等,用一整套机制,来解决多事务并发问题。并且也简单说明了事务隔离机制下的几种问题描述分析。本篇博客,重点来说数据库的锁机制。何为锁在it界中,经常会听到锁的概念。比如:双11商品抢购、卖票什么的。锁的使用,原创 2021-07-13 19:26:15 · 201 阅读 · 0 评论 -
MySQL——事务隔离级别
文章目录前言事务及ACID属性并发事务处理带来的问题(无隔离级别情况下)事务隔离级别查看数据库隔离级别设置隔离级别前言在MySQL中,innodb存储引擎支持事务。在使用同一个MySQL时,往往会存在多个客户端连接同一个MySQL服务器的问题,这就导致了数据库的操作一般会存在多个事务的问题。多个事务可能会并发的对某一个相同的数据进行增删改查操作,可能会出现脏读、脏写、幻读、不可重复读等问题。为了解决数据库多事务的并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制等,用一整套原创 2021-07-09 19:03:14 · 122 阅读 · 1 评论 -
MySQL——表创建时数据类型选择
文章目录前言概述数字类型日期类型字符串类型前言在数据库表的创建时,往往会对各种列类型的选择很迷茫。本篇博客重点说明表创建时,各项列类型的区别和合理选择。概述在MySQL中,通常情况下列的数据类型一般会选用以下几种:确定合适的大类型:数字、字符串、时间、二进制;确定具体的类型:有无符号、取值范围、变长定长等。在MySQL数据类型设置方面,尽量用更小的数据类型,因为它们通常有更好的性能,花费更少的硬件资源。并且,尽量把字段定义为NOT NULL,避免使用NULL。数字类型类型大原创 2021-07-07 17:20:37 · 1527 阅读 · 0 评论 -
MySQL——count(xxx)查询数量优化
文章目录前言demo前言在实际的项目开发中,面对业务逻辑,或多或少都会使用到查询表中数据量的问题。比如使用select count(*) from A;来获取A表中的数据量信息。但每个程序员都有自己的代码习惯,有的人喜欢用count(1),有的人也喜欢使用count(字段)等多种方式获取指定表中的数据量大小。那到底那种查询sql,执行效率会更高呢?demo查看下列几种获取表数据大小的sql,判断各种sql的执行效率:EXPLAIN select count(1) from employe原创 2021-07-06 16:34:58 · 350 阅读 · 1 评论 -
MySQL——in和exists优化
文章目录前言in的使用和优化exists的使用和优化前言前面几篇博客重点讲述了索引树的结构,以及索引分主键索引(聚簇索引)、普通索引和聚合索引等。以及也讲述了排序、分页等优化措施。本篇博客重点讲述,in和exists的优化以及使用。其实in和exists的优化原则,依旧是:小表驱动大表。这里的小表并非是数据量小的表,而是受查询条件影响的,查询出结果集大小小的表。in的使用和优化在一般的项目业务sql开发中,经常会使用到in关键字,作为范围查询。如下所示案例:select * from原创 2021-07-05 16:28:01 · 541 阅读 · 0 评论 -
MySQL——join查询优化
文章目录前言测试前的准备MySQL 表关联常见算法Nested-Loop Join (NLJ) 嵌套循环连接算法——有索引时使用Block Nested-Loop Join (BNL)基于块的嵌套循环连接算法——无索引时使用join连接查询优化前言在上一篇博客分页优化中,最后的sql执行计划可以看出存在all的情况,本篇博客重点探究为什么会出现查询type类型为all的情况,以及优化处理措施。测试前的准备创建两张表t1和t2,两张表结构一样,但数据量不同。其中,两张表都是带有主键id和idx_原创 2021-06-29 21:47:31 · 171 阅读 · 0 评论 -
MySQL——分页优化
文章目录准备前言limit 执行原理常见分页场景优化技巧1、根据`自增且连续的主键排序`,使用where id > m limit n 分页2、根据`非主键`字段排序,进行分页查询准备建立数据库表,同时使用存储过程,添加100000条记录信息。sql如下所示:CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名',原创 2021-06-29 17:32:34 · 150 阅读 · 0 评论 -
MySQL——索引设计原则
文章目录前言代码先行,索引后上联合索引尽量覆盖条件不要在小基数字段上建立索引长字符串可以采用前缀索引where与order by冲突时优先where基于慢sql查询做优化前言在MySQL中,索引的设计往往需要遵循下列原则信息。代码先行,索引后上一般在业务逻辑编写完成后,将涉及到表相关sql进行分析,采取适用于大部分条件的环境下,设计索引。联合索引尽量覆盖条件比如可以设计一个或者两三个联合索引(尽量少建单值索引),让每一个联合索引都尽量去包含sql语句里的where、order by、group原创 2021-06-24 20:12:21 · 113 阅读 · 0 评论 -
MySQL——Using Filesort文件排序详解
文章目录前言filesort文件排序方式单路排序或双路排序的选择trace工具测试单双路排序前言在之前,分析SQL索引使用情况时,使用Explain执行计划参数说明进行分析查看。其中,执行指定的sql后,再字段Extra中,会出现using filesort信息,表示文件排序。那么,文件排序又是什么东西呢?filesort文件排序方式文件排序的方式分为以下两种:单路排序:一次性地取出满足条件行的所有字段,将查询到的数据集放入sort_buffer 缓存中,再在缓存中排序。用trace工原创 2021-06-24 19:18:14 · 744 阅读 · 3 评论 -
MySQL——常见SQL深入优化之order by、group by
文章目录知识回顾order by案例一案例二案例三案例四案例五案例六案例七优化总结(含group by)知识回顾在前面的博客中,重点说到了Explain 执行计划。针对每条sql,使用Explain 命令进行执行后,都会出现一个Extra列。使用的数据表结构为:Explain执行计划执行后,Extra列 包含如下几种类型值:Using index:使用覆盖索引(覆盖索引不是索引,只是一种查询方式)通过联合索引的B+树结构,就能直接获取需要的信息;不需要额外的从主键索引树中,再次获取原创 2021-06-21 18:05:05 · 182 阅读 · 0 评论 -
MySQL——cost成本计算之MySQL如何选择使用索引(trace)
文章目录前言trace工具分析执行计划前言在之前博客中,根据测试案例,发现同样的sql语句,因为传入的条件值的不同,导致MySQL有时候选择使用索引,有时候又不适用索引。如下所示sql的执行计划:EXPLAIN SELECT * FROM employees WHERE name > 'aaa';EXPLAIN SELECT * FROM employees WHERE name > 'zzzz';在MySQL中,为什么会出现上述这种玄乎的现象呢?本篇博客重点说明原因。在说原创 2021-06-16 22:28:54 · 416 阅读 · 0 评论 -
MySQL——索引优化
文章目录前言准备探究1、联合索引`第一个字段`使用范围一般不走索引2、覆盖索引优化3、强制走索引 force index4、in和or在表`数据量大`的情况会`走索引`,数据量小会选择全表扫描5、like "kk%" 不管数据量多少,都会走索引前言之前博客中,说明了MySQL会根据开发者编写的SQL语句,判断其是否执行索引。以及说明了Explain命令,查看sql执行情况分析。但都仅仅是理论。本篇博客,采取数据库添加十万条数据,讲述如何设定索引,以及如何正确编写sql做说明。准备在测试的数据库中原创 2021-06-16 20:47:10 · 80 阅读 · 1 评论 -
MySQL——关于MySQL中的bin-log(删库删表恢复)
文章目录什么是bin-logBinlog的特点bin-log如何开启binlog相关指令1、查看binlog是否开启2、清空所有的bin-log日志信息3、插入数据,查看文件前后变化,以及查看bin-log文件信息创建新的bin-log文件查看最后一条bin-log日志的相关信息删库删表模拟,以及数据恢复删除测试test表数据恢复部分数据恢复(根据起始位置)部分数据恢复(根据操作时间) (未测试)什么是bin-log在sql的执行过程中,MySQL会将sql语句的执行逻辑进行记录操作,将其保存在bin-原创 2021-06-12 18:29:45 · 182 阅读 · 2 评论 -
MySQL——内部组件结构和sql执行过程
文章目录前言MySQL内部结构大致图MySQL内部组件详解连接器前言MySQL作为一般最常用的数据库之一,其内部结构多种多样。当前博客主要说明MySQL的内部组件结构和SQL的执行过程。MySQL内部结构大致图从上图中,大致可以看出,MySQL的内部组件,分为两大类:Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图原创 2021-06-08 17:29:04 · 107 阅读 · 2 评论 -
MySQL——通过Explain执行计划优化SQL(索引)
文章目录简介测试数据库表创建索引优化注意点简介上一篇博客中,讲述了MySQL给开发者提供的Explain的用法,以及执行指定的sql后,获取到数据的每条列各自的含义信息。具体如何对SQL进行性能优化和什么情况下会导致SQL索引失效呢,下面具体做相关说明。测试数据库表创建CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名原创 2021-06-01 22:00:57 · 221 阅读 · 0 评论 -
MySQL——Explain执行计划参数说明
文章目录前言Mysql 版本Explain 工具介绍Explain分析示例explain 两个变种explain extendedexplain partitionsexplain中的列1、id2、select_type列3、table列4、type列(`*`)5、possible_keys列6、key列7、key_len列8、ref列9、rows列10、Extra列前言在上一篇博客中(MySql——存储引擎索引实现),针对联合索引查看SQL是否进行了索引优化时,进行了调用。Explain到底有什么效原创 2021-06-01 16:05:23 · 269 阅读 · 0 评论 -
MySql——存储引擎索引实现
文章目录常见的几种存储引擎MyISAM引擎索引实现InnoDB引擎索引实现常见的几种存储引擎Mysql中有很多存储引擎。是针对表而言。在创建数据表的时候,可以选择指定的存储引擎。如下所示:在了解存储引擎之前,首先需要了解数据库和数据表在磁盘中保存的位置。本篇博客依据使用centos服务器进行测试。查看/etc/my.cnf文件,可以知道MySQL安装位置和数据保存位置。CentOS下mysql默认安装位置cat /etc/my.cnfcd /var/lib/mysql/mysq原创 2021-05-22 16:32:32 · 122 阅读 · 3 评论 -
MySql——索引底层数据结构和算法
文章目录简介索引什么是索引MySql未使用二叉树MySql未使用红黑二叉树B-Tree B树B+Tree B+树简介Mysql是常用的数据库,本篇博客重点介绍索引和其相关的数据结构索引什么是索引索引是帮助MySql高效获取数据的排好序的数据结构。其中索引的数据结构分为:二叉树、红黑树、Hash表、B-Tree(B+树)等。【问:】当无索引时,数据查找是怎么样的?假设MySql中有如下所示的数据信息:假设查询语句为:select * from t where t.Col2 = 89;原创 2021-05-19 23:33:28 · 150 阅读 · 0 评论