MySQL技术细节
逻辑架构
主要分为三个部分

查询过程
大致的过程: 1)客户端向服务端发起一条请求 2)服务端先检查查询缓存,如果命中缓存,则直接返回结果,否则交给下一阶段 3)服务器进行SQL解析,预处理,在经过查询优化形成对应的执行计划 4)mysql根据执行计划,调用API给存储引擎,进行数据的读取和存储 5)将结果返回给客户端,并缓存查询结果

[!quote] GPT MySQL使用自定义的应用层协议进行通信。这个协议运行在TCP/IP协议之上,用于客户端和服务器之间的数据交换。在大多数情况下,默认的MySQL端口是3306。MySQL协议包括用于查询、认证、错误报告和数据传输的各种命令。此协议支持灵活的数据编码,并且能够处理各种数据类型,如字符串、二进制数据和数值。此外,MySQL协议还支持SSL/TLS,为客户端和服务器之间的数据传输提供加密保护。
MySQL的协议不是基于文本的简单协议,而是一个更复杂的二进制协议,需要特定的客户端来正确编码和解码通信内容。
连接
分为短连接和长连接 短连接在数据传输完毕之后就会释放,长连接会一直占用资源
连接池 数据库的连接是比较影响性能,所以使用连接池的目的也是尽量少的创建连接,然后又要避免去维护很多空闲的连接
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。
[!quote] GPT 在需求减少时,许多连接池实现会自动减少连接数。这通常是通过以下两种机制之一实现的:
空闲连接超时:连接池通常有一个参数来设置连接的最大空闲时间。如果一个连接在指定的时间内没有被使用,那么它会被关闭并从连接池中移除。这样,当需求降低时,那些不再需要的空闲连接就会被自动关闭,从而减少资源的占用。
定期清理:有些连接池实现会定期检查池中的连接,并关闭那些长时间未使用的连接。这种机制可以帮助确保连接池不会保持比实际需要更多的连接。
表分区
分为横向分区和纵向分区 横向只是把行分开,纵向是把column分开了,改变了表结构。MySQL不支持纵向分区。
优点
- 可以按照时间分区,用于分割表的查询
- 分区可以在不同的硬盘上
- 更容易维护(增加删除特定分区) 限制
- 一个表中只能有1024个分区