mysql入门记录1---执行sql的过程
一、结构
大体可以分为 Server 层和存储引擎层两部分
1.server层:又分为连接器、分析器、优化器、执行器等。除了直接查数据部分的功能,其他功能都是在这层实现的,比如内置函数、存储过程、触发器、视 图等。
2.存储引擎:主要是用来存储数据,提供读写接口,InnoDB从MySQL 5.5.5 版本开始成为了默认存储引擎。
二、短链接和长链接
1.mysql客户端默认断开时间是 wait_timeout 控制的,默认值是 8 小时
2.短连接:一般是指查询后马上断开
3.长连接:只要一段时间内,客户端有请求,那么就还是用同一个连接
连接的动作是非常复杂,开销也比较大的,所以一般建议使用长连接。但是长连接太多必定会占用太多内存,导致OOM。解决办法有两个,定期断开长连接,另外可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。
三、查缓存
mysq也有缓存,查询时候先从缓存里面查,查不到再从存储的数据查。
之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。
一般不建议用 ,因为只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。
不使用缓存的写法:可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。
使用缓存的写法:确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定
如:select SQL_CACHE id from Student ;
ps:MySQL 8.0 版本直接将查询缓存的整块功能删掉了
四、执行过程
分析器:分析语法是否正确,分析是什么操作,是哪个表,哪一列等等
优化器:优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序
执行器:根据表的引擎定义,去使用这个引擎提供的接口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App