浅谈MySQL原理及优化(2) ——处理引擎

引言

在前一篇文章中,我们讨论了MySQL架构的组件。它主要由客户端、处理引擎和存储引擎组成。

浅谈MySQL原理及优化(2) ——处理引擎

现在,让我们详细分析处理引擎的功能。处理引擎相当于MySQL的大脑。他有三个非常重要的角色。

管理连接与线程

Mysql是一个多线程模型,它使用线程池来管理数据库连接。线程对象在线程池中重用,这可以减少重复创建对象的开销。我们可以通过线程缓存大小来设置线程池的大小,这样MySQL就可以更好地利用现有的线程连接。

浅谈MySQL原理及优化(2) ——处理引擎

管理query cache:

查询缓存是mysql的独特设计。MySQL将使用以前的查询结果来直接缓存结果集。简而言之,其原理类似于将SQL语句和结果集存储为键值对。如果下次有相同的查询语句并且数据库没有改变。MySQL不访问实际的表,而是直接返回前面的结果集。注意这里的“同一个句子”是完全一样的,没有一个词是不好的。合理使用查询缓存将带来良好的性能。当然,查询缓存在测试性能时会带来一些麻烦,这可以被SQL _ no _ cacheint所掩盖

解析SQL语句与执计划生成

处理引擎将把SQL语句解析成语法树的结构,以便理解语句中的字段、表、条件和其他信息。

浅谈MySQL原理及优化(2) ——处理引擎

接下来,您需要确定如何执行SQL语句并返回结果数据。众所周知,SQL是一种声明性语言。用户只在语句中解释期望的结果,而不告诉引擎使用什么过程来获取数据。这对于用户来说更容易编程,但是对于数据库管理系统来说,这增加了复杂性,并且执行计划需要引擎来确定。完成这部分工作的代码称为优化器。

对于固定查询,通常有许多方法来执行它。优化器的任务是从中选择最佳解决方案,即成本最低的解决方案。

这就像围棋中的人工智能阿尔法狗,它必须从围棋无数可能的失败中选择一个获胜率最高的。

浅谈MySQL原理及优化(2) ——处理引擎

优化器将使用一个成本计算函数来估计每个执行模式的时间成本,最后从几个执行模式中选择他认为成本最低的一个。

请注意,该成本是估算的,不一定非常准确,并且取决于数据表中的一些统计信息。如果统计信息不够准确,或者优化器的估计方法不是很好,MySQL的执行计划将不会得到优化。

我们在实践中确实会遇到这种情况,并且通常使用两种方法来解决它们。

使用提示来提示mysql使用更好的执行计划

简化语句,使MySQL更容易估算成本。

以上是对MySQL执行引擎的介绍和分析。我希望它能对每个人的日常工作有更好的帮助。