写点什么

MySQL 学习笔记

作者:秃头小帅oi
  • 2024-03-04
    福建
  • 本文字数:1347 字

    阅读完需:约 4 分钟

MySQL学习笔记

MySQL 整体分为两层,1.server 层,2.存储引擎(InnoDB,Memory,MyISAM)等,默认使用 InnoDB。



  1. server 层分为连接器,查询缓存,分析器,优化器,执行器。核心服务基本都在这层,不同存储引擎共用同一个 server 层。

  2. 使用时需要先链接,使用的协议是 TCP,需要出入 IP 地址,端口,用户名和密码。

  3. 链接后长时间不使用该链接会处于 Sleep 状态,超时(wait_timeout)后会断开连接,默认 8 小时。

  4. 连接分为长连接和短连接;长连接是连接成功后如果一直有查询动作则一直不会断开;短连接是执行过几轮查询后会断开连接,再次使用需要重连。

  5. 连接过程复杂耗时,所以建议使用长连接。但长连接使用过多也会导致 MySQL 内存涨的比较块,这是因为在查询过程中临时使用的内存会管理在连接对象中,这样连接不中断内存不释放。严重时会导致 MySQL 内存占用量过高而被系统强制杀掉,这样就会出现 MySQL 异常重启。

  6. 为了避免这个问题可以:

    定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连.

    如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态

  7. 查询缓存就是在连接建立后的查询操作的第一步,如果命中缓存就直接返回结果结束查询,看似会提高查询效率。

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

  9. 查询缓存变更频繁,只要对表进行更新,那表中的查询缓存全部清空。好在 MySQL 也提供了这种“按需使用”的方式,你可以将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定,像下面这个语句一样

    mysql> select SQL_CACHE * from T where ID=10;

  10. 解析器,识别 sql 语法,主要做词法分析和语法分析。

  11. 优化器,在解析器执行完成后引擎就能理解用户的行为了,但很多行为逻辑结果一致但因为中间执行顺序不同而执行效率也不同。如:优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。优化器的作用就是决定执行顺序,保证执行效率。

  12. 执行器,根据优化后的语句调用存储引擎的接口,将执行结果收集并返回给客户端。

  13. 注意一点,表名是否存在,表中列是否存在等判断都是在解析器阶段进行判断的。

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

用户头像

摸个鱼,顺便发点有用的东西 2023-06-19 加入

互联网某厂人(重生版)

评论

发布
暂无评论
MySQL学习笔记_秃头小帅oi_InfoQ写作社区