查询执行
查询执行的入口点:
/**
Parse a query.
@param thd Current thread
@param rawbuf Begining of the query text
@param length Length of the query text
@param[out] found_semicolon For multi queries, position of the character of
the next query in the query text.
*/
void mysql_parse(THD *thd, char *rawbuf, uint length,
Parser_state *parser_state)
在做查询解析之前,先要再查询缓冲里查找,如果找到,则直接利用以前的查询结果。
query_cache_send_result_to_client(thd, rawbuf, length)
但是执行这个函数之前需要,执行一些对lex->safe_to_cache_query 和thd->server_status的清理操作:
lex_start(thd);
mysql_reset_thd_for_next_command(thd);
为什么会这样呢?我们需要具体阅读query_cache_send_result_to_client()的代码。