了解分析程序和查询优化器

已完成

解析 器

分析程序是一个将查询分解为令牌的内部进程。 分析程序由两部分组成:

  • MySQL 语法规则检查器
  • 词法扫描程序

然后分析程序生成分析树,预处理器执行进一步检查,例如是否存在表或列。 预处理器还会检查特权。

解析器的工作是将查询文本翻译成查询优化器可以使用的有效分析树结构

查询优化器

查询优化器接收分析树并将其转换为查询执行计划。 查询优化器必须通过预测不同计划的成本在众多潜在计划中找到最佳计划。 查询优化器向相关存储引擎询问统计信息,例如每个表的页数或行的长度。 由于查询优化器依赖于存储引擎来获取统计信息,因此它并不总是拥有所需的统计信息,或者是最新的和准确的统计信息。

注意

统计信息由相关的存储引擎创建,每个存储引擎创建和存储不同的统计信息。 例如,InnoDB 不存储行长度统计信息。

可以使用 EXPLAIN 语句查看 Azure Database for MySQL 如何执行查询。 EXPLAIN 可以用作 SELECT、INSERT、DELETE、REPLACE 和 UPDATE 的前缀。 使用 EXPLAIN 语句时,MySQL 会解释所选的执行计划而不是执行它。

注意

EXPLAIN 语句与 DESCRIBE 同义。 在实践中,EXPLAIN 用于显示 MySQL 将如何执行查询,而 DESCRIBE 用于显示有关表中列的信息。 EXPLAIN 和 DESCRIBE 需要与原始语句相同的权限。 EXPLAIN 还需要 SHOW VIEW 权限来显示视图的执行计划

还可以了解上次执行的查询的成本。 运行查询后,通过执行以下操作来显示成本:

SHOW STATUS LIKE 'last_query_cost';

此语句会显示执行查询所需的读取页数。 通过在查询变体后显示 last_query_cost,可以查明每个查询的相对“成本”。

MySQL 的体系结构旨在并发执行多个成功的查询。 如果可以选择,请考虑执行更多的小查询,而不是更少的大而复杂的查询。

提示

DESCRIBE 和 EXPLAIN 在 MySQL 中被称为实用工具语句。 有四个实用工具语句:DESCRIBE、EXPLAIN、HELP 和 USE。 HELP 返回关于特定主题的帮助,例如 HELP“数据类型”,它会显示所有 MySQL 数据类型。 USE 指示 MySQL 应该将以下任何语句应用于哪个数据库,例如 USE MyDatabase;