MySQL高级部分
- MySQL 基础架构
- 什么是长链接?
- 什么是短连接?
- 如何选择?
- 解决方案
- 注意:
- 一条查询语句的执行过程:
MySQL 基础架构
MySQL可以分为server层和存储引擎两个部分
server包括 连接器(管理连接,权限验证)、查询缓存(命中直接返回结果)、分析器(词法分析,语法分析)、优化器(执行计划生成,索引选择)、执行器(操作引擎,返回结果)
存储引擎(存储数据,提供读写接口)
什么是长链接?
长链接是连接成功后,如果客户端持续有请求,则一直使用同一个连接。
什么是短连接?
短连接是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个
如何选择?
建立连接的过程通常是比较复杂的,所以尽量使用长连接
但是,长连接可能会导致内存占用太大被系统杀掉。因为MySQL在执行过程中临时使用的内存是管理在连接对象里面的,这些资源会在连接断开时才释放。
解决方案
- 定期断开长链接
- 在MySQL5.7之后,可以通过mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。
注意:
尽量不要使用查询缓存。
因为,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上的所有查询缓存都会被清空。
可以将query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存,对确定使用查询缓存的语句,可使用SQL_CACHE指定
mysql> select SQL_CACHE * from T where ID=10;
(在MySQL8.0之后 查询缓存功能已被删除)
一条查询语句的执行过程:
(查询语句执行前)通过连接器建立连接
mysql -h$ip -P$port -u$user -p
MySQL接到请求后,会先在查询缓存中搜索(k-v),如果存在则直接返回结果;
如果没有命中查询缓存,分析器会先做“词法分析”。即:将“SELECT”识别出来,将字符串“T”识别为表名T…
做完“词法分析”后,就要做“语法分析”,判断该SQL语句是否满足MySQL语法
之后经过优化器处理: 如果表存在多个索引的时候决定使用哪个索引;或者在有多表关联的时候,决定各个表的连接顺序
然后执行器:开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。如果有权限,打开表的时候,执行器就会根据表的引擎定义,使用其提供的接口。