Mysql基础知识点《一》

一条sql的执行流程
image.png
  1. 客户端连接Mysql,连接器负责连接管理和权限认证。
  2. 连接之后会将查询缓存中,如果缓存命中了,再检查时候有访问的权限,如果有,则返回数据集,否则执行3。
  3. 分析器负责对sql语句先解析语句,再检查语句是否正确,交于优化器。
  4. 优化器负责索引的选择和多表连接时选择查询顺序,之后交于执行器。
  5. 执行器首先判断时候有权限访问表,如果有的话执行器就根据表的定义的引擎去调用引擎接口,再接收数据集。
  6. 返回数据集给客户端。
查询缓存好吗?

查询缓存中的好吗?是不是要开启查询缓存呢?其实不建议开启查询缓存,原因是缓存失效非常频繁,只要表更新了,缓存就会失效。所以对于那些更新操作多的表来说简直是灾难,除非是静态表,所以在mysql8中已经将查询缓存取消了。

Mysql中的长链接和短连接,长连接会导致什么问题?
  1. 长连接是指,当客户端连接数据库之后,如果持续访问数据库,将保持连接。
  2. 短连接是指,当客户端连接数据库之后,在很少的几次操作之后就会断开连接。
    那是不是长连接就一定好呢?其实不是的,在长连接中,会产生大量的内存使用,这些内存会保存在连接对象中,所以长连接会导致内存涨的很快,会到值OOM,表现的就是mysql异常重启,那怎么解决呢?我们可以适时地将长连接断开,这样内存就可以回收了,还有一个办法就是重置连接对象,利用mysql_reset_connection命令,这样就不用重连数据库了,只是恢复连接对象到刚连接的状态。
为什么查询权限要在执行阶段?

这是因为sql操作涉及的表不一定只有sql语句中的那些,要在执行器阶段才能确认。

问题:

如果表 T 中没有字段 k,而你执行了这个语句 select * from T
where k=1, 那肯定是会报“不存在这个列”的错误: “Unknown column ‘k’ in
‘where clause’”。你觉得这个错误是在我们上面提到的哪个阶段报出来的呢?

:分析器阶段,在分析器阶段解析器会解析sql语句生成一颗解析树,判断表时候存在,列字段是否存在等。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容