MySQL逻辑架构,对MySQL整体的了解

首先,我们了解MySQL的逻辑架构,对MySQL有一个整体的了解。

例如,当执行以下语句时:

mysql >从T中选择*其中ID = 10
我们看到的结果是返回了一条记录,那么MySQL是如何执行这条SQL查询语句的呢?

首先,我们来看一下MySQL的逻辑架构图:

一般来说,MySQL分为服务器层和存储引擎层。

服务器层包含连接器、查询缓存、分析器、优化器、执行器等MySQL核心服务功能。

存储引擎层负责存储和提取数据。它的架构是插件式的,支持InnoDB、MyISAM、Memory等多种存储引擎。

从图中不难看出,不同的存储引擎共享一个服务器层。让我们通过上面的SQL查询语句来看看整个流程和各个组件的功能。

连接器
连接器是客户端与MySQL连接的组件。客户端通过以下命令连接:

mysql -h i p − P ip -P ipPport -u$user -p
输入此命令后,输入用户名和密码。虽然可以在上述命令中同时输入密码,但是很容易造成密码泄露,特别是在生产环境中,不建议明确输入密码。
如果用户名或密码不正确,将返回“拒绝用户访问”的错误,连接将中断。
如果用户名和密码认证通过,连接器会在权限表中查找你的权限,然后这个连接的权限判断就取决于读取权限了。
这意味着在用户成功建立连接后,即使他的权限被修改,当前的连接也不会生效,除非重新连接被断开。

查询缓存
在前面的步骤中,我们与MySQL建立了连接,然后我们从客户端输入了SQL查询语句:

mysql >从T中选择*其中ID = 10
MySQL将首先在查询缓存中查找该记录是否存在。如果存在,则直接返回结果。

但是在大多数情况下,我建议您不要使用查询缓存。为什么?因为查询缓存往往弊大于利。

很容易使查询缓存中的缓存数据无效。只要更新了表中的任何数据,这个表的缓存就会被清空,特别是对于写操作频繁的应用,缓存基本没有影响。

我们可以通过将参数query_cache_type设置为DEMAND来禁用查询缓存,或者显式设置为使用查询缓存:

mysql >从T中选择SQL_CACHE *,其中ID = 10
注意:MySQL版直接删除了查询缓存的整个功能,也就是说这个功能从8.0开始就完全消失了。

分析器
MySQL如何“识别”这个SQL语句?

通过分析器,MySQL首先对SQL语句进行词法分析,提取出几个字符串。

然后分析语法,判断SQL语句是否符合MySQL语法。

如果您的语句不正确,您将收到“您的SQL语法有错误”的错误提示。例如,以下select语句缺少首字母“S”。

mysql >从t中选择*其中ID = 1;

错误1064 (42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解在第1行“从t选择*其中ID=1”附近使用的正确语法
一般的语法错误都会提示错误发生的第一个地方,所以你要注意“用near”的内容。

【计算机】优化程序
通过分析器,MySQL知道该怎么做,在开始执行之前需要经过优化器的处理。

当表中有多个索引时,优化器决定使用哪个索引。例如,以下查询语句:

mysql >使用(ID)从t1连接t2中选择*其中t1.c=10,t2.d = 20
有两种执行方式:

从表t1读取t1.c=10线,然后读取t1。id = t2。身份证和T2。从表T2判断d = 20。
t2线。从表T2中读取d = 20,然后是t1。ID=t2。从表t1判断ID和t1.c=10。
优化器是判断选择哪个执行模式。大致的判断依据是“成本估算”。如果哪个执行模式的“成本”更低,选择哪个。

执行机构
MySQL通过分析器知道做什么,通过优化器知道怎么做,最后执行。首先MySQL会判断是否有查询权限,如果没有,会返回一个没有权限的错误,如下:

mysql >从T中选择*其中ID = 10

错误1142 (42000):对表“T”的用户“b”@“localhost”的SELECT命令被拒绝
如果您有权限,请打开该表并继续执行。打开表时,执行器会根据表中定义的存储引擎,使用存储引擎提供的接口。

例如,在我们的示例中,在表T中,ID字段没有索引,因此执行器的流程是:

调用InnoDB存储引擎接口取一行,判断ID=10。如果没有,跳过;如果是,保存到结果集中。
然后拿着下一行重复,直到表格结束。
最后,合成一个结果集并返回给客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值