首先以完整的概念来查看整体体系结构。
MySQL服务监视的端口为3306,连接客户端有很多方法。它可以同步或异步,长连接或短连接,TCP连接或UNIX插座,MySQL具有专门用于连接连接的模块。连接时,您需要验证权限。
每次客户端生成连接或会话时,都会在服务器上创建线程以处理该线程。相反,如果要杀死会话,请杀死线程。我们使用show processList,其中有什么连接。当杀戮被杀死时,这是ID杀死的情况。
如果客户暂时没有移动太久,则连接器将与很长一段时间没有活跃的睡眠断开连接。有两个参数wait_timeout和Interactive_timeout,默认情况下为28800,即8小时。
如果客户端断开连接后再次发送请求,则如果要继续,您将收到一个时间,需要重新连接,然后执行请求。
由于连接消耗资源,它将创建一个线程,并且不能使您无限,因此有一个参数可以控制您的最大连接数量。5.7版本中的默认值为151,最大值可以设置为100,000。
MySQL内部有一个缓存模块,我们看到缓存默认情况下是关闭的。
由于有一个模块可以关闭,因此主要是因为MySQL随附的缓存应用程序方案是有限的。带有大量数据更新的应用程序。因此,我们缓存了此件,我们仍然将其提供给ORM框架。例如,MyBatis打开第一个级别的缓存或独立的缓存服务器,例如Redis.start.在MySQL8.0启动,查询缓存函数已删除。
解析器解析器和前处理器预处理器,此步骤主要分析SQL语句的语法和语法分析和语义分析。
词汇分析是您输入由多个字符串和空间组成的SQL语句。mySQL需要识别内部的字符串是什么和代表的内容。Mysql识别输入的关键字“ select”,这是一个查询语句。它还需要识别字符串“ t”到“表名t”中并标识字符串“ t”并标识字符串”。ID“ IN to”“列ID”。
例如,此SQL将分为8个单词。
第二步是语法分析。语法分析将对SQL进行一些语法检查。例如,是否关闭单个引号,然后根据MySQL定义的语法规则,根据SQL语句生成数据结构。我们将其称为此数据结构。
如果您的语句错误,您将收到一个错误提醒“您的SQL语法中有错误”。例如,以下语句选择的字母“ S”较少。
如果单词和语法是正确的,但是目前将在哪里报告,是的,前处理器。
预处理器进一步检查了树的合法性。例如:是否存在数据表和数据列,是否存在模棱两可,等等。
在启动执行之前,应处理优化器。SQL语句可以具有很多执行方法,并且最终返回了相同的结果。它们是等效的。查询优化器的目的是基于分析树生成不同的执行计划,然后选择一个最佳执行计划。MySQL根据成本(成本)使用优化器。哪个执行计划的支出最少,使用。
优化器将优化一些,例如,当我们查询多个表时,哪个表的数据是基准表;当可以使用多个索引时,选择了索引。但是,优化器不是通用的,并且不是可以自动优化的垃圾SQL语句。不可能每次选择最佳执行计划。撰写SQL时,每个人都应该注意。
优化器完成后,解析树将变成SQL语句前面的计划信息,以查看执行计划信息。
如果您想查看详细信息,也可以使用格式= JSON,或打开Optimizer Trace。
当执行器开始执行时,您必须首先判断您是否拥有该表T的权限。如果没有,则未经许可就返回错误。
如果您有权限,请打开表并继续执行。执行器使用执行计划操作存储引擎。它使用存储引擎提供的相应API来完成操作。第5章将数据返回给客户端。
有许多存储引擎,您可以在Navicat中看到
在创建表时也可以指定它,最常用的存储引擎是Innodb,
检查存储目录
不同的存储引擎具有存储数据的不同文件。FRM是一个表结构文件,数据文件InnoDB是一个,内存没有,Myisam是两个。
比较常用的存储类型,https://dev.mysql.com/doc/refman/5.7/storage-engines.html
应用程序范围相对较小,表级锁定限制了阅读/写作的性能。因此,在网络和数据仓库配置中,通常用于仅读取或读取的工作。
如何快速将100万个数据插入数据库中,我们可以首先使用Mysiam引擎插入数据,然后将存储引擎修改为InnoDB。
MySQL5.7.InoDB中的默认存储引擎是具有交易安全性(与酸兼容)的MySQL存储引擎,它具有提交,滚动和倒塌恢复以保护用户数据的功能。InnodB线路锁(不升级到更厚 - -颗粒锁)和甲骨文式一致的非锁定读数可改善多用户并发和性能。InDB将用户数据存储在聚合索引中,以基于基于主要键的常见查询来减少I/O。还支持外部密钥参考完整性约束。
适用于经常更新的表,存储和发布 - 阅读和编写交易处理的业务系统。
将所有数据存储在内存中以快速访问需要快速找到的环境中。该发动机以前已成为桩引擎,其用例正在减少。InnoDB及其缓冲池存储器区域提供了一种常见且持久的方法,可将大多数或所有数据保存在内存中,而NDBCluster是一个大的分布式数据集。提供快速的键值搜索。
将数据放在内存中,快速读写,但是数据库已重新启动或折叠,数据将消失,仅适用于临时表。
它的表实际上是一个具有逗号划分值的文本文件。CSV表允许以CSV格式导入或存储数据,以便以相同格式交换数据和应用程序。由于CSV表没有索引,因此数据通常是在正常操作期间保存在InnoDB表中,并且仅在进出口阶段使用CSV表。
请勿允许空行,也不支持索引。该格式是通用的,可以直接编辑,适合在不同数据库之间导入和导出。
这些紧凑的联合表用于存储和检索很少报价的大量历史,存档或安全审计信息。
不支持索引,不支持更新,删除。
有许多存储引擎,在不同的应用程序方案中选择了不同的存储引擎。
如果这些存储引擎无法满足您的需求,那么您也可以自己开发存储引擎,https://dev.mysql.com/doc/internals/en/custom-engine.html.致执行者。
通常,我们可以将MySQL分为三层。
我们的客户端必须连接到MySQL Server的端口3306,我们必须与服务器建立连接。然后管理所有连接并验证客户端的身份和权限。这些功能在连接层完成。
连接层将向服务层提供SQL语句,其中包含一系列过程:
例如,缓存的判断,根据SQL的相应界面以及我们SQL语句的短语和语法的分析(例如如何识别关键字,如何识别别名以及语法中是否有错误等等。)。
然后是优化器。MySQL的基础层将根据某些规则优化我们的SQL语句,并最终将其交给执行。
存储引擎是我们数据真正存储的地方。它支持MySQL中的不同存储引擎,然后向下是内存或磁盘。
最后感谢您的观看?