MySQL 查询深入浅出

查询执行过程

MySQL 的查询过程总的来说分为五个步骤:

  1. 向 MySQL 服务器发送一条查询请求;
  2. 服务器首先检查查询缓存,如果命中缓存,则会立刻返回存储在缓存中的数据,否则进入下一阶段;
  3. 服务对 SQL 进行解析、预处理、再由优化器生成对应的执行计划;
  4. MySQL 根据执行计划,调用存储引擎 API 来执行查询;
  5. 将结果返回客户端,同时缓存查询结果。

查询缓存

查询缓存对系统的额外消耗不止在写操作,也在于读操作:

  1. 任何查询语句在开始之前都必须经过检查,即使这条 SQL 不会命中查询缓存;
  2. 两条相同的 SQL 语句,其中一条因为大写字母、多余的空格,那会在查询缓存时是不会被命中的,所以规范中我们写 SQL 语句时,要大写都大写,要小写都小写;
  3. 如果查询结果是可以被缓存的,那么执行完成后,会将结果缓存,但也会为系统带来额外消耗;
  4. 如果缓存结果相关表的数据进行了更改,则缓存结果就会失效;

查询优化器

MySQL 的查询优化器时一个非常复杂的部件,它使用了非常多的优化策略来生成一个最优的执行计划,比如:

  1. 重新定义表的关联顺序(多张表关联查询时,并不一定按照 SQL 中指定的顺序进行,但有一些技巧可以指定关联顺序);
  2. 优化 MIN() 和 MAX() 函数(找某列的最小值,如果该列有索引,只需要查找 B+Tree 索引最左端,反之则可以找到最大值);
  3. 提前终止查询(比如:使用 LIMIT 时,查找到满足数量的结果集后会立即终止查询);
  4. 优化排序(在老版本 MySQL 会使用两次传输排序,即先读取行指针和需要排序的字段在内存中对其排序,然后再根据排序结果去读取数据行,而新版本采用的是单次传输排序,也就是一次读取所有的数据行,然后根据给定的列排序。对于 I/O 密集型应用,效率会高很多)。

猜你喜欢

转载自blog.csdn.net/qq_44726330/article/details/121831130