加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

MySQL学习01——一条SQL语句的执行

发布时间:2022-11-21 14:02:21 所属栏目:MsSql教程 来源:未知
导读: 学习MySQL时,需要了解MySQL是如何执行一条SQL语句的,通过执行过程了解MySQL的内部架构,这里以select语句为例。
概览
MySQL 可以分为 Server 层和存储引擎层两部分。

连接器
连接器负责

学习MySQL时,需要了解MySQL是如何执行一条SQL语句的,通过执行过程了解MySQL的内部架构,这里以select语句为例。

概览

MySQL 可以分为 Server 层和存储引擎层两部分。

asp 连接mssql_mssql 内部连接_asp mssql连接源码

连接器

连接器负责跟客户端建立连接、获取权限、维持和管理连接。

MySQL数据库属于服务端,我们的应用程序属于客户端,当我们要操作数据库时,需要将应用程序连接到数据库,连接器主要负责这项工作。

建立连接需要用户名和密码,当用户名、密码都认证通过后,连接器还需要查询你的用户拥有的权限,后续select、update、delete等语句的权限判断逻辑都依赖连接时读到的权限。所以如果要修改用户权限,需要重新建立连接。

1、如何建立连接?

mysql -h$ip -P$port -u$user -p

-p后面应该接密码,但是不建议在shell语句中显示的输入密码。

执行上述语句后,就需要在交互对话框中输入密码。

2、如何查看连接?

show processlist

连接信息以表的形式呈现。

mssql 内部连接_asp 连接mssql_asp mssql连接源码

3、长连接问题?

由于建立连接的过程还是有一定消耗,所以我们不希望每次执行SQL语句都要重新建立一次连接。MySQL使用的长链接的方式建立连接,建立连接成功后,当前客户端的请求都会使用这一个连接。如果客户端长时间不工作,连接器会主动断开连接,断开连接后,客户端需要重新建立连接才能与数据库进行交互。

但是所有的客户端都适用长连接的话,MySQL的内存会涨很快,这是由于MySQL在执行每个客户端的请求时,使用的内存都管理在每个连接对象中,这些资源只有断开连接时才会释放,所以连接越多,内存消耗就越大。有两个方案可以解决这个问题:

查缓存

每次执行完的SQL语句,其结果都会以k-v形式存到缓存中,key就是查询语句,value是查询结果。这样方便下次使用同样的SQL语句时能够直接在缓存中获取数据。

在实际应用中,该功能大概率会起到反效果。每次执行SQL语句后,需要将结果存到内存中,但是每当更新数据库中的数据时,缓存都会失效,所以缓存命中率一般都很低。在8.0后的版本中,就不在支持查询缓存的功能了。

分析器

分析器先会做“词法分析”。词法分析会将select关键字、代表表名的字符串、代表列ID的字符串都识别成计算机能识别的方法或变量。之后进行“语法分析”,根据词法分析得到的结果,判断SQL语句是否满足MySQL的语法,如果不满足会抛出异常。

优化器

分析器可以让MySQL直到SQL语句的功能mssql 内部连接,但是在开始执行之前,还需要进行优化,让SQL语句执行的效率更高。

比如:表有多个索引时,需要选择更快的索引。

优化器执行完成后,SQL语句的执行方案就确定下来了。

执行器

优化器确定执行方案后,执行器会执行语句。

首先判断用户是否有操作这个表的权限,这个权限就是在连接过程中确定的。根据表的引擎定义,调用表中指定引擎的接口。如果执行方案中使用了索引,会根据索引找到对应的结果,否则只会根据查询条件遍历表,找到所有满足条件的结果。

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!