查询执行优化
- 使用 EXPLAIN 优化查询
- 该EXPLAIN语句提供有关MySQL如何执行语句的信息:EXPLAIN作品有SELECT,DELETE,INSERT,REPLACE,和UPDATE语句。当EXPLAIN与可解释的语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括
- 解释输出格式
- 该EXPLAIN语句提供有关MySQL如何执行语句的信息。EXPLAIN作品有SELECT,DELETE,INSERT,REPLACE,和UPDATE语句。EXPLAIN为SELECT语句中使用的每个表返回一行信息。它按照MySQL在处理语句时读取它们的顺序列出了输出中的表。MySQL使用嵌套循环连
- 扩展的 EXPLAIN 输出格式
- 该EXPLAIN语句会产生额外的(“扩展”)信息,这些信息不是EXPLAIN输出的一部分,但可以通过在SHOW WARNINGS其后发出一条语句来参见EXPLAIN。在MySQL 8.0.12的,扩展的信息可用于SELECT,DELETE,INSERT,REPLACE,和UPDATE语句。在8.0.
- 获取命名连接的执行计划信息
- 要获得在命名连接中执行的可解释语句的执行计划,请使用以下语句:EXPLAIN[options]FORCONNECTION connection_id;EXPLAIN FOR CONNECTION返回EXPLAIN当前在给定连接中用于执行查询的信息。由于数据(和支持统计数据)的更改,它可能会产生与EX
- 估计查询性能
- 在大多数情况下,您可以通过计算磁盘搜索次数来估计查询性能。对于小型表,通常可以在一个磁盘搜索中找到一行(因为索引可能已缓存)。对于更大的表,您可以估计,使用B树索引,您需要进行许多查找才能找到行:。log(row_count)/ log(index_block_length/ 3 * 2 /(ind
- 控制查询计划评估
- 查询优化器的任务是找到执行SQL查询的最佳计划。因为“好”和“坏”之间的性能差异计划可能是几个数量级(即几秒钟相对于几小时甚至几天),大多数查询优化器(包括MySQL的优化器)在所有可能的查询评估计划中或多或少地穷举搜索最佳计划。对于联接查询,MySQL优化器调查的可能计划的数量与查询中引用的表的数
- 可切换的优化
- 使用optimizer_switch系统变量可以控制优化程序的行为。它的值是一组标志,每个标志的值都为on或off指示相应的优化器行为是启用还是禁用。此变量具有全局值和会话值,可以在运行时更改。可以在服务器启动时设置全局默认值。要参见当前的优化器标志集,请选择变量值:mysql>SELECT@
- 优化器提示
- 控制优化程序策略的一种方法是设置optimizer_switch系统变量(请参见“可切换的优化”)。对该变量的更改会影响所有后续查询的执行;为了使一个查询与另一个查询有不同的影响,必须optimizer_switch在每个查询之前进行更改。控制优化器的另一种方法是使用优化器提示,该提示可以在各个语句
- 索引提示
- 索引提示为优化器提供有关在查询处理期间如何选择索引的信息。此处描述的索引提示与“优化器提示”中描述的优化器提示不同。索引和优化器提示可以单独使用,也可以一起使用。索引提示仅适用于SELECT和UPDATE语句。在表名后指定索引提示。(有关在语句中指定表的一般语法SELECT,请参见“ JOIN子句”
- 优化器成本模型
- 为了生成执行计划,优化器使用成本模型,该模型基于对查询执行期间发生的各种操作的成本进行估算。优化器具有一组内置的默认“成本常数”,可用于制定有关执行计划的决策。优化器还有一个成本估算数据库,可在执行计划构建期间使用。这些估计值存储在系统数据库的server_cost和engine_cost表中,my
- 优化器统计
- 该column_statistics数据字典表存储直方图统计有关列值,以供在构建查询执行计划的优化。要执行直方图管理,请使用以下ANALYZE TABLE语句;请参见“ ANALYZE TABLE语句”。该column_statistics表具有以下特征:该表包含除几何类型(空间数据)和之外的所有数
- 缓冲和缓存
- 为了最小化磁盘 I / O,MyISAM存储引擎采用了许多数据库管理系统所使用的策略。它使用缓存机制将最常访问的表块保留在内存中:对于索引块,维护了一种称为键缓存(或键缓冲区)的特殊结构。该结构包含许多块缓冲区,这些块缓冲区放置了最常用的索引块。对于数据块,MySQL不使用特殊的缓存。相反,它依赖于
根据表,列,索引的详细信息以及WHERE
子句中的条件,MySQL优化器考虑了许多技术来有效执行SQL查询中涉及的查找。无需读取所有行即可执行对巨大表的查询;可以执行涉及多个表的联接,而无需比较行的每个组合。优化器选择执行最有效查询的一组操作称为“查询执行计划”,也称为EXPLAIN
计划。您的目标是认识到EXPLAIN
表示查询优化的计划,如果发现一些低效的操作,则可以学习SQL语法和索引技术来改进计划。