MySql之逻辑架构

本文详细介绍了MySQL的逻辑架构,包括连接层、服务层、引擎层和存储层,重点讲解了查询流程,涉及查询缓存、预编译SQL语句的优势以及性能提升和防止SQL注入的方法。
摘要由CSDN通过智能技术生成

MySql逻辑架构

连接层

最上层是一些客户端和连接服务,包含本地 sock 通信和大多数基于客户端/服务端工具实现的类似于 tcp/ip 的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于 SSL 的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

服务层

标题

引擎层

存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。

MyISAM 和 和 InnoDB

存储层

数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

MySql查询流程

mysql 的查询流程大致是:

mysql 客户端通过协议与 mysql 服务器建连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,也就是说,在解析查询之前,服务器会先访问查询缓存(query cache)——它存储 SELECT 语句以及相应的查询结果集。如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。它仅仅将缓存中的结果返回给用户即可,这将大大提高系统的性能。

语法解析器和预处理:首先 mysql 通过关键字将 SQL 语句进行解析,并生成一颗对应的“解析树”。mysql 解析器将使用 mysql 语法规则验证和解析查询;预处理器则根据一些 mysql 规则进一步检查解析数是否合法。 查询优化器当解析树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。

然后,mysql 默认使用的 BTREE 索引,并且一个大致方向是:无论怎么折腾 sql,至少在目前来说,mysql 最多只用到表中的一个索引。

Mysql预编译

SQL语句预编译

一、预编译的SQL语句处理 预编译语句PreparedStatement 是java.sql中的一个接口,它是Statement的子接口。通过Statement对象执行SQL语句时,需要将SQL语句发送给DBMS(数据库管理系统),由DBMS首先进行编译后再执行。预编译语句和Statement不同,在创建PreparedStatement 对象时就指定了SQL语句,该语句立即发送给DBMS进行编译。当该编译语句被执行时,DBMS直接运行编译后的SQL语句,而不需要像其他SQL语句那样首先将其编译。预编译的SQL语句处理性能稍微高于普通的传递变量的办法。

String sql = “insert into t_customer values(?,?,?,?)”;//组织一条含有参数的SQL语句
​
PreparedStatement ps = conn.prepareStatement(sql);//ps对象包含语句 insert into t_customer values(?,?,?,?),它已发送给DBMS,并为执行作好了准备。

预编译作用:

  • 预编译阶段可以优化 sql 的执行 预编译之后的 sql 多数情况下可以直接执行,DBMS 不需要再次编译,越复杂的sql,编译的复杂度将越大,预编译阶段可以合并多次操作为一个操作。可以提升性能。
  • 防止SQL注入 使用预编译,而其后注入的参数将不会再进行SQL编译。也就是说其后注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数,参数中的or或者and 等就不是SQL语法保留字了。
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 8.0 的逻辑架构图如下: ``` +---------------------------------------------------+ | Client | +---------------------------------------------------+ | | v +---------------------------------------------------+ | SQL Interface | +---------------------------------------------------+ | | v +---------------------------------------------------+ | Parser | +---------------------------------------------------+ | | v +---------------------------------------------------+ | Optimizer & Query Planner | +---------------------------------------------------+ | | v +---------------------------------------------------+ | Execution Engine | +---------------------------------------------------+ | | v +---------------------------------------------------+ | Storage Engine | +---------------------------------------------------+ ``` 这是一个简化的逻辑架构图,展示了 MySQL 8.0 中的不同组件和其间的关系。以下是各个组件的功能说明: - Client:客户端,与数据库进行交互的用户应用程序。 - SQL Interface:SQL 接口,负责解析客户端发来的 SQL 语句。 - Parser:解析器,将 SQL 语句解析为内部数据结构。 - Optimizer & Query Planner:优化器和查询规划器,对查询进行优化,并生成执行计划。 - Execution Engine:执行引擎,根据执行计划执行 SQL 查询。 - Storage Engine:存储引擎,负责数据的存储和检索。 这些组件共同协作,完成客户端发出的 SQL 查询的处理过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值