MySQL学习-逻辑架构(二)

64 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

前言

上篇我们学习了MySQL中的逻辑架构。有兴趣的小伙伴可以阅读(# MySQL学习-逻辑架构(一))。
下面我们继续学习MySQL中的逻辑架构。

逻辑架构

服务层

  • Optimizer:查询优化器
    • SQL语句在语法解析之后、查询之前会使用查询优化器确定SQL语句的执行路径,生成一个执行计划。
    • 这个执行计划表明应该使用哪些索引进行查询(全表检索还是使用索引检索,表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询),并将查询结果返回给用户。
    • 它使用选取-投影-连接策略进行查询。

举例一

SELECT employee_id, employee_name
FROM employees
WHERE department_id = 1;

这个SELECT查询会先根据WHERE语句进行选取,而不是将表全部查询出来以后再进行department_id字段的过滤。这个SELECT查询先根据employee_id, employee_name进行属性投影,而不是将属性全部取出来之后再进行过滤,将两个查询条件连接起来生成最终查询结果。

  • Caches&Buffers:查询缓存组件
    • MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结果,如果能够在其中找到对应的查询结果,那么就不必再进行查询解析、优化和执行整个过程了,直接将结果返回给客户端。
    • 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。
    • 这个查询缓存可以在不同客户端之间共享。
    • 从MySQL5.7.20开始,不推荐使用查询缓存,并在MySQL8.0中删除了这个机制。

今天先学习到这里,明天继续。