
深入理解mysql
文章平均质量分 89
素履之往、、
这个作者很懒,什么都没留下…
展开
-
深入理解mysql-第十二章 mysql查询优化-Explain 详解(下)
我们前面两章详解了Explain的各个属性,我们看到的都是mysql已经生成的执行计划,那这个执行计划的是如何生成的?我们能看到一些过程指标数据吗?实际mysql贴心为我们提供了执行计划的各项成本评估指标的以及优化器生成执行计划的整个过程的方法。一、查看执行计划计算的成本数据 我们上边介绍的EXPLAIN语句输出中缺少了一个衡量执行计划好坏的重要属性 -成本。那如何查看具体的成本呢?MySQL也贴心的为我们提供了一种查看某个执行计划花费的成本的方式-Json格式的执行计划。我们只需要在EXPLAI.原创 2021-07-16 10:45:26 · 711 阅读 · 0 评论 -
深入理解mysql-第十一章 mysql查询优化-Explain 详解(中)
一、执行计划-type属性 执行计划的一条记录就代表着MySQL对某个表的执行查询时的访问方法,其中的type列就表明了这个访问这个单表的方法具体是什么,比方说下边这个查询:mysql> EXPLAIN SELECT * FROM s1 WHERE key1 = 'a';+----+-------------+-------+------------+------+---------------+----------+---------+-------+------+------...原创 2021-07-16 10:21:54 · 146 阅读 · 0 评论 -
深入理解mysql-第十章 mysql查询优化-Explain 详解(上)
一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。Mysql为我们提供了EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划,从而可以有针对性的提升我们查询语句的性能。一、初识Expalin 如果我们想看看某个查询的执行计划的话,可以在具体的查询语句前边加一个EXPLAIN,就像这样:mysql> EXPLAIN SEL..原创 2021-07-15 18:10:03 · 199 阅读 · 0 评论 -
深入理解mysql-第九章 mysql查询优化-基于规则
本章我们继续开始对sql语句的查询优化讲解,上一章我们主要讲mysql内部对索引的选择优化。本章我们讲一下mysql依据一些规则,把糟糕的SQL语句转换成可以比较高效执行的语句,这个过程也可以被称作查询重写。一、条件化简1.1移除不必要的括号有时候表达式里有许多无用的括号,比如这样:((a = 5 AND b = c) OR ((a > c) AND (c < 5)))优化器会把那些用不到的括号给干掉,就是这样:(a = 5 and b = c) OR (a...原创 2021-07-15 17:34:22 · 168 阅读 · 0 评论 -
深入理解mysql-第八章 mysql查询优化-基于成本
我们知道mysql服务器程序处理来自客户端的查询请求大致需要经过三个部分,分别是连接管理、解析与优化、存储引擎。存储引擎我们已经前几章已经讲过了,下面几个章节主要研究下mysql的的优化。本章主要讲解对索引的最优选择,内连接的驱动表选择。一、所谓成本 MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询。其实在MySQL中一条查询语句的执行成本是由下边这两个方面组成的:I/O成本,我们的表经常使用的MyISAM、InnoDB存储引擎都是将数.原创 2021-07-15 16:11:04 · 302 阅读 · 1 评论 -
深入理解mysql-第七章 mysql存储引擎InnoDB的索引-索引的使用
索引会给我们定位到数据页提供很大的便利,但根据算法的思想,这种快速的定位数据必定要复出一定的代价。所以索引并不是越多越好。一、索引的代价 如何更好的使用索引之前先要了解一下使用的代价,它在空间和时间上都会拖后腿: 空间上的代价 每建立一个索引都要为它建立一棵B+树,每一棵B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,一棵很大的B+树由许多数据页组成,占用了很大的一片存储空间。 时间上的代价(维护b+查询树结构) 每次对表中的数据进行增、删、改操作..原创 2021-05-20 16:12:01 · 195 阅读 · 1 评论 -
深入理解mysql-第六章 mysql存储引擎InnoDB的索引-B+树索引
一、引入索引 在没有索引的情况下,不论是根据主键列或者其他列的值进行查找,由于我们并不能快速的定位到记录所在的页,所以只能从第一个页沿着双向链表一直往下找,因为要遍历所有的数据页,时间复杂度就是O(n),所以这种方式显然是超级耗时的。所以我们需要采取一定的数据结构来存储数据,方便我们进行数据的增删改查操作。 问题的需求大致定义清楚了,我们现在回想一下,能否利用已经学习过的数据结构解决这个问题呢?支持快速查询、插入等操作的动态数据结构,我们已经学习过散列表、平衡二叉查找树、跳表。 ...原创 2021-05-20 11:51:56 · 216 阅读 · 0 评论 -
深入理解mysql-第五章 InnoDB记录存储结构-页结构
前言:页是InnoDB管理存储空间的基本单位,上一章我们主要分析了页中的主要的构成行的存储结构-行格式,其中简单提了一下页的概念。这章我们详细讲解一下页的存储结构。一、数据页结构 前边我们简单提了一下页的概念,它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。和存储一条条数据的行有多种行格式类似,InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等...原创 2021-04-12 16:59:30 · 588 阅读 · 0 评论 -
深入理解mysql-第四章 InnoDB记录存储结构-行格式
MySQL对于我们来说是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的?MySQL是以什么方式来访问的这些数据?前面说过,MySQL服务器上负责对表中数据的读取和写入工作的部分是存储引擎,比如InnoDB、MyISAM、Memory等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,真实数据在不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据,关闭服务器后表中的数据就消失了。由于InnoDB是MySQL原创 2021-04-09 12:16:40 · 313 阅读 · 0 评论 -
深入理解mysql-第三章 mysql处理请求流程
客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?一、服务器处理请求总体图客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请求为例来画个图展示一下大致的过程:从图中我们可以看出,服务器程序处理来自客户端的查询请求大致需要经过三个部分,分别是连接管理、解析与优化、存储引擎。下边我们来详细看一下这三个部分都干了什么。二、连接管理 客户端进.原创 2021-04-08 18:29:42 · 558 阅读 · 2 评论 -
深入理解mysql-第二章 mysql的系统变量
一、系统变量1.1 系统变量简介 MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量,比如允许同时连入的客户端数量用系统变量max_connections表示,表的默认存储引擎用系统变量default_storage_engine表示,查询缓存的大小用系统变量query_cache_size表示,每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并...原创 2021-04-08 17:45:23 · 201 阅读 · 0 评论 -
深入理解mysql-第一章 mysql基础
前言:mysql系列文章为学习 xiaohaizi的书籍《MySQL 是怎样运行的:从根儿上理解 MySQL》的读书笔记,主要记录了书中主要知识点,便于后续复习。一、mysql服务端-客户端架构mysql其实是由两部分组成的,一部分是客户端程序,一部分是服务器程序。它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从而操作它维护的数据。...翻译 2021-04-08 17:32:48 · 413 阅读 · 0 评论