如果查询中包含任何用户自定义函数、存储函数、用户变量、时间变量、临时表、mysql库中的系统表,其查询结果都不会被缓存。...得到解析树之后,不能马上执行,这还需要对这棵树进行预处理,也就是说,这棵树,我没有经过任何优化的树,预处理器会这这棵树进行一些预处理,比如常量放在什么地方,如果有计算的东西,把计算的结果算出来等等......每一条SQL的执行顺序查询优化器就是根据MySQL对数据统计表的一些信息,比如索引,比如表一共有多少数据,在真正执行SQL之前,MySQL会根据自己数据进行综合的判定,判断此次查询在多种执行方式里面,选哪种执行方式运行最快...6、结果返回
如果开了查询缓存,则返回结果给客户端,并且查询缓存也放一份。
即使没有数据,MySQL仍然会返回这个查询的相关信息,比如该查询影响到的行数以及执行时间等等。...前面提到过,服务器端向客户端返回数据是通过一些数据包的。这些数据包需要符合客户端/服务器通信协议。如果数据量过大,在传输过程中,可能对MySQL的数据包进行缓存然后批量发送。