MySQL会解析查询,并创建内部数据结构(解析树),
然后对其进行各种优化,
包括重写查询、决定表的读取顺序,以及选择合适的索引等。
用户可以通过特殊的关键字提示(hit)优化器,影响它的决策过程。
也可以请求优化器解释(explain)优化过程的各个因素,
使用户可以知道服务器是如何进行优化决策的,
并提供一个参考基准,便于用户重构查询和schema、修改相关配置,
使应用尽可能高效运行。
优化器并不关心表使用什么存储引擎,但存储引擎对于优化查询是有影响的。
优化器会请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。
例如,某些存储引擎的某种索引,可能对一些特定的查询有优化。
对于SELECT语句,在解析查询之前,服务器会先检查查询缓存(Query Cache),
如果能够在其中找到对应的查询,服务器就不必再执行查询解析、优化各执行整个过程,
而是直接换回查询缓存中的结果集。